Duvida sobre como modificar dados em um data.frame

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

Vc pode utilizar o seguinte comando
nomedodataframe$nomedanovavariável[variávelantiga == "A"]<- 1 nomedodataframe$nomedanovavariável[variávelantiga == "B"]<- 2
suponha que a variável antiga seja "sexo" e a nova variável seja "sexo1" e o seu data frame seja "avaliação" então: avaliação$sexo1[escore == "A"]<- 1 avaliação$sexo1[escore == "B"]<- 2 valeu Em 1 de março de 2012 17:22, Augusto Ribas <ribas.aca@gmail.com> escreveu:
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@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.

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@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@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.

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@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@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@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.

Outra maneira mais direta é usando levels e labels Exemplo: x <- factor(sample(LETTERS[1:4], 10, rep=T)) x [1] B C D B A D D D C B Levels: A B C D y <- factor(x, lab=LETTERS[1:4], lev=c("B","A","C","D")) y [1] A C D A B D D D C A Levels: A B C D On Thu, 1 Mar 2012, Augusto Ribas wrote:
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
participantes (4)
-
Augusto Ribas
-
Benilton Carvalho
-
Fernando Antonio de souza
-
Paulo Justiniano