[R-br] Duvida sobre como modificar dados em um data.frame

Benilton Carvalho beniltoncarvalho em gmail.com
Quinta Março 1 19:07:39 BRT 2012


Acho q o cliente de email vai "zoar" minha solucao 1 (por ser
longa)... mas e' tudo numa linha so'. b

2012/3/1 Benilton Carvalho <beniltoncarvalho em gmail.com>:
> Augusto, vc sempre pode optar pela simplicidade (solucao 2)... Vou
> comecar com o seu exemplo (obrigado!!!) e, dai', vou para como eu
> resolveria:
>
> ###
> #Exemplo de dados - com set.seed
> ###
> set.seed(1)
> resposta<-c(c(rnorm(10,5),rnorm(10,8)),c(rnorm(10,8),rnorm(10,5)))
> fator1<-c(rep(c("A","B"),each=10),rep(c("A","B"),each=10))
> fator2<-rep(c("1","2"),each=20)
> dados<-data.frame(resposta,fator1,fator2)
>
> ## backup dos dados
> dados0 <- dados
>
> ## sua solucao como referencia
> dados[which(dados$fator2%in%"2"),"fator1"]<-sapply(dados[which(dados$fator2%in%"2"),"fator1"],function(x){
> if(x=="B"){
>
>
>                                             replace(x, x == "B", "A")
>
>
>                                            }
>
>
>                                    else {
>
>
>                                            replace(x, x == "A", "B")
>
>
>                                            }
>
>
>                                     })
>
> ## solucao 1
> dados1 <- with(dados0, {idx = fator2 == 2; fator1[idx] <-
> ifelse(fator1[idx] == 'A','B','A'); data.frame(resposta, fator1,
> fator2)})
>
> ## solucao 2
> dados2 <- dados0
> idx <- dados2$fator2 == 2
> dados2$fator1[idx] <- with(dados2[idx,], ifelse(fator1 == 'A', 'B', 'A'))
>
> all(dados == dados1)
> all(dados == dados2)
>
> abs, b
>
> 2012/3/1 Augusto Ribas <ribas.aca em gmail.com>:
>> Ola pessoal.
>> Estou com uma duvida simples aqui.
>> Eu estava analisando dados aqui e vi um grafico estranho, dai vi que os
>> dados  estavam digitados errados.
>> Mas o erro é simples.
>> Existem 2 fatores, e os niveis de um fator estão trocados, mas somente
>> dentro de um nivel do segundo fator, o resto esta tudo correto.
>> Basicamente existe um vetor e eu tenho que trocar A por B e vive versa.
>> Ai eu consegui arrumar imendando um monte de comando mas ficou uma coisa
>> enorme e especifica para algo que parece tão simples.
>> ai pensei se alguém tem uma solução mais economica e geral que a que eu fiz?
>>
>> ###
>> #Exemplo de dados
>> ###
>> resposta<-c(c(rnorm(10,5),rnorm(10,8)),c(rnorm(10,8),rnorm(10,5)))
>> fator1<-c(rep(c("A","B"),each=10),rep(c("A","B"),each=10))
>> fator2<-rep(c("1","2"),each=20)
>> dados<-data.frame(resposta,fator1,fator2)
>>
>> ###
>> #Grafico Errado
>> ###
>> library(lattice)
>> bwplot(resposta~fator1|fator2,data=dados)
>>
>> ###
>> #Minha Solução
>> ###
>> dados[which(dados$fator2%in%"2"),"fator1"]<-sapply(dados[which(dados$fator2%in%"2"),"fator1"],function(x){
>> if(x=="B"){
>>
>>
>>                                    replace(x, x == "B", "A")
>>
>>
>>                                  }
>>
>>
>>                          else {
>>
>>
>>                                  replace(x, x == "A", "B")
>>
>>
>>                                  }
>>
>>
>>                            })
>>
>> ###
>> #Grafico Certo
>> ###
>> bwplot(resposta~fator1|fator2,data=dados)
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> --
>> Grato
>> Augusto C. A. Ribas
>>
>> Site Pessoal: http://augustoribas.heliohost.org
>> Lattes: http://lattes.cnpq.br/7355685961127056
>>
>>
>> _______________________________________________
>> R-br mailing list
>> R-br em listas.c3sl.ufpr.br
>> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
>> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código
>> mínimo reproduzível.


Mais detalhes sobre a lista de discussão R-br