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

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


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