Formatação de várias variáveis

Prezados colegas, Estou com um banco de dados (x) no seguinte formato sexo idade tempo Q1 Q2 Q3 Q4 Q5 Q6 ...Q63 1 44 24.0 4 3 3 3 2 4 0 62 28.0 1 5 2 2 3 1 1 52 6.0 4 5 4 2 5 4 0 51 27.0 4 4 4 3 3 3 1 32 3.5 1 3 2 1 4 3 0 33 5.0 1 5 1 1 1 1 As variáveis de Q1 a Q6 são variáveis na escala de Likert1 = Discordo totalmente2 = Discordo 3 = Neutro 4 = Concordo 5 = Concordo totalmente Gostaria de saber se é possível criar uma rotina ou se há uma função capaz deformatar as variáveis de Q1 a Q63 em fatores com as etiquetas referentes a cada nível. Se eu fosse fazer uma a uma, repetiria 63 vezes o seguinte comando para cada variável: x$Q1<-factor(x$Q1, label=c("Discordo totalmente", "Discordo", "Neutro", "Concordo", "Concordo totalmente"), levels=1:5) Acredito que haja uma maneira mais prática. Obrigado desde já. Alessandro

Oi Alessandro, deve ter uma forma mais elegante de se fazer isso no R, mas você pode usar isso aqui para solucionar seu problema rapidamente: x <- ... # Seu data.frame aqui vars <- sapply(c(1:63), function(x) { paste('G', x, sep = "") }) new_labels <- c("Discordo totalmente", "Discordo", "Neutro", "Concordo", "Concordo totalmente") for (var in vars) { x[[var]] <- factor(x[[var]], label = new_labels, levels = 1:5) } Abs, alf. 2014-12-03 0:53 GMT-02:00 Alessandro Corrêa <alessand22@yahoo.com.br>:
Prezados colegas,
Estou com um banco de dados (x) no seguinte formato
sexo idade tempo Q1 Q2 Q3 Q4 Q5 Q6 ...Q63 1 44 24.0 4 3 3 3 2 4 0 62 28.0 1 5 2 2 3 1 1 52 6.0 4 5 4 2 5 4 0 51 27.0 4 4 4 3 3 3 1 32 3.5 1 3 2 1 4 3 0 33 5.0 1 5 1 1 1 1
As variáveis de Q1 a Q6 são variáveis na escala de Likert 1 = Discordo totalmente 2 = Discordo 3 = Neutro 4 = Concordo 5 = Concordo totalmente
Gostaria de saber se é possível criar uma rotina ou se há uma função capaz de formatar as variáveis de Q1 a Q63 em fatores com as etiquetas referentes a cada nível.
Se eu fosse fazer uma a uma, repetiria 63 vezes o seguinte comando para cada variável:
x$Q1<-factor(x$Q1, label=c("Discordo totalmente", "Discordo", "Neutro", "Concordo", "Concordo totalmente"), levels=1:5)
Acredito que haja uma maneira mais prática.
Obrigado desde já.
Alessandro
_______________________________________________ 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.

Prezado Alan, O que foi isso? Mágica? Única alteração que fiz foi trocar o G pelo Q. Inclusive saltou as primeiras 3 variáveis que eram sexo, idade e tempo que não deveriam ser alteradas pela função. -----x <- ... # Seu data.frame aquivars <- sapply(c(1:63), function(x) { paste('Q', x, sep = "") })new_labels <- c("Discordo totalmente", "Discordo", "Neutro", "Concordo", "Concordo totalmente") for (var in vars) { x[[var]] <- factor(x[[var]], label = new_labels, levels = 1:5)}----Confesso que fiquei atordoado, não entendi nada, mas funcionou mesmo!Pode explicar? Já salvei dos dados em .Rdata. Muitíssimo obrigado mesmo. Alessandro Em Quarta-feira, 3 de Dezembro de 2014 0:32, Alan Fachini <alfakini@gmail.com> escreveu: Oi Alessandro, deve ter uma forma mais elegante de se fazer isso no R, mas você pode usar isso aqui para solucionar seu problema rapidamente: x <- ... # Seu data.frame aquivars <- sapply(c(1:63), function(x) { paste('G', x, sep = "") })new_labels <- c("Discordo totalmente", "Discordo", "Neutro", "Concordo", "Concordo totalmente") for (var in vars) { x[[var]] <- factor(x[[var]], label = new_labels, levels = 1:5)} Abs, alf. 2014-12-03 0:53 GMT-02:00 Alessandro Corrêa <alessand22@yahoo.com.br>: Prezados colegas, Estou com um banco de dados (x) no seguinte formato sexo idade tempo Q1 Q2 Q3 Q4 Q5 Q6 ...Q63 1 44 24.0 4 3 3 3 2 4 0 62 28.0 1 5 2 2 3 1 1 52 6.0 4 5 4 2 5 4 0 51 27.0 4 4 4 3 3 3 1 32 3.5 1 3 2 1 4 3 0 33 5.0 1 5 1 1 1 1 As variáveis de Q1 a Q6 são variáveis na escala de Likert1 = Discordo totalmente2 = Discordo 3 = Neutro 4 = Concordo 5 = Concordo totalmente Gostaria de saber se é possível criar uma rotina ou se há uma função capaz deformatar as variáveis de Q1 a Q63 em fatores com as etiquetas referentes a cada nível. Se eu fosse fazer uma a uma, repetiria 63 vezes o seguinte comando para cada variável: x$Q1<-factor(x$Q1, label=c("Discordo totalmente", "Discordo", "Neutro", "Concordo", "Concordo totalmente"), levels=1:5) Acredito que haja uma maneira mais prática. Obrigado desde já. Alessandro _______________________________________________ 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.

Não tão enxuta como a do Alessandro mas também resolve. dados<- structure(list(sexo = c(1L, 0L, 1L, 0L, 1L, 0L), idade = c(44L, 63L, 52L, 51L, 32L, 33L), tempo = c(24, 28, 6, 27, 3.5, 5), q1 = c(4L, 1L, 4L, 4L, 1L, 1L), q2 = c(3L, 5L, 5L, 4L, 3L, 5L), q3 = c(3L, 2L, 4L, 4L, 2L, 1L), q4 = c(3L, 2L, 2L, 3L, 1L, 1L), q5 = c(2L, 3L, 5L, 3L, 4L, 1L), q6 = c(4L, 1L, 4L, 3L, 3L, 1L)), .Names = c("sexo", "idade", "tempo", "q1", "q2", "q3", "q4", "q5", "q6"), class = "data.frame", row.names = c(NA, -6L)) library(plyr) a<-function(x){ for (i in 1:length(x)){ if (x[i] == 1) { x[i] <- "Discordo totalmente" } if (x[i] == 2) { x[i] <-"Discordo" } if (x[i] == 3) { x[i]<-"Neutro" } if (x[i] == 4) { x[i]<-"Concordo" } if (x[i] == 5) { x[i]<-"concordo totalmente" } } return(x) } nomes<-names transformado<-ddply(dados,.(c(names(teste[,4:9]))),a) is.data.frame(transformado) Em 3 de dezembro de 2014 01:32, Alessandro Corrêa <alessand22@yahoo.com.br> escreveu:
Prezado Alan,
O que foi isso? Mágica?
Única alteração que fiz foi trocar o G pelo Q. Inclusive saltou as primeiras 3 variáveis que eram sexo, idade e tempo que não deveriam ser alteradas pela função.
----- x <- ... # Seu data.frame aqui vars <- sapply(c(1:63), function(x) { paste('Q', x, sep = "") }) new_labels <- c("Discordo totalmente", "Discordo", "Neutro", "Concordo", "Concordo totalmente")
for (var in vars) { x[[var]] <- factor(x[[var]], label = new_labels, levels = 1:5) } ---- Confesso que fiquei atordoado, não entendi nada, mas funcionou mesmo! Pode explicar?
Já salvei dos dados em .Rdata.
Muitíssimo obrigado mesmo.
Alessandro
Em Quarta-feira, 3 de Dezembro de 2014 0:32, Alan Fachini < alfakini@gmail.com> escreveu:
Oi Alessandro, deve ter uma forma mais elegante de se fazer isso no R, mas você pode usar isso aqui para solucionar seu problema rapidamente:
x <- ... # Seu data.frame aqui vars <- sapply(c(1:63), function(x) { paste('G', x, sep = "") }) new_labels <- c("Discordo totalmente", "Discordo", "Neutro", "Concordo", "Concordo totalmente")
for (var in vars) { x[[var]] <- factor(x[[var]], label = new_labels, levels = 1:5) }
Abs,
alf.
2014-12-03 0:53 GMT-02:00 Alessandro Corrêa <alessand22@yahoo.com.br>:
Prezados colegas,
Estou com um banco de dados (x) no seguinte formato
sexo idade tempo Q1 Q2 Q3 Q4 Q5 Q6 ...Q63 1 44 24.0 4 3 3 3 2 4 0 62 28.0 1 5 2 2 3 1 1 52 6.0 4 5 4 2 5 4 0 51 27.0 4 4 4 3 3 3 1 32 3.5 1 3 2 1 4 3 0 33 5.0 1 5 1 1 1 1
As variáveis de Q1 a Q6 são variáveis na escala de Likert 1 = Discordo totalmente 2 = Discordo 3 = Neutro 4 = Concordo 5 = Concordo totalmente
Gostaria de saber se é possível criar uma rotina ou se há uma função capaz de formatar as variáveis de Q1 a Q63 em fatores com as etiquetas referentes a cada nível.
Se eu fosse fazer uma a uma, repetiria 63 vezes o seguinte comando para cada variável:
x$Q1<-factor(x$Q1, label=c("Discordo totalmente", "Discordo", "Neutro", "Concordo", "Concordo totalmente"), levels=1:5)
Acredito que haja uma maneira mais prática.
Obrigado desde já.
Alessandro
_______________________________________________ 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.
_______________________________________________ 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.

dados[, 4:ncol(dados)] <- apply(dados[,4:ncol(dados)], MARGIN = 2, FUN = function(x) factor(x, label = c("Discordo totalmente", "Discordo", "Neutro", "Concordo", "Concordo totalmente"), level = 1:5)) Em 3 de dezembro de 2014 03:21, Fernando Antonio de souza < nandodesouza@gmail.com> escreveu:
Não tão enxuta como a do Alessandro mas também resolve.
dados<- structure(list(sexo = c(1L, 0L, 1L, 0L, 1L, 0L), idade = c(44L, 63L, 52L, 51L, 32L, 33L), tempo = c(24, 28, 6, 27, 3.5, 5), q1 = c(4L, 1L, 4L, 4L, 1L, 1L), q2 = c(3L, 5L, 5L, 4L, 3L, 5L), q3 = c(3L, 2L, 4L, 4L, 2L, 1L), q4 = c(3L, 2L, 2L, 3L, 1L, 1L), q5 = c(2L, 3L, 5L, 3L, 4L, 1L), q6 = c(4L, 1L, 4L, 3L, 3L, 1L)), .Names = c("sexo", "idade", "tempo", "q1", "q2", "q3", "q4", "q5", "q6"), class = "data.frame", row.names = c(NA, -6L))
library(plyr)
a<-function(x){ for (i in 1:length(x)){ if (x[i] == 1) { x[i] <- "Discordo totalmente" } if (x[i] == 2) { x[i] <-"Discordo" } if (x[i] == 3) { x[i]<-"Neutro" } if (x[i] == 4) { x[i]<-"Concordo" } if (x[i] == 5) { x[i]<-"concordo totalmente" } } return(x) } nomes<-names transformado<-ddply(dados,.(c(names(teste[,4:9]))),a) is.data.frame(transformado)
Em 3 de dezembro de 2014 01:32, Alessandro Corrêa <alessand22@yahoo.com.br
escreveu:
Prezado Alan,
O que foi isso? Mágica?
Única alteração que fiz foi trocar o G pelo Q. Inclusive saltou as primeiras 3 variáveis que eram sexo, idade e tempo que não deveriam ser alteradas pela função.
----- x <- ... # Seu data.frame aqui vars <- sapply(c(1:63), function(x) { paste('Q', x, sep = "") }) new_labels <- c("Discordo totalmente", "Discordo", "Neutro", "Concordo", "Concordo totalmente")
for (var in vars) { x[[var]] <- factor(x[[var]], label = new_labels, levels = 1:5) } ---- Confesso que fiquei atordoado, não entendi nada, mas funcionou mesmo! Pode explicar?
Já salvei dos dados em .Rdata.
Muitíssimo obrigado mesmo.
Alessandro
Em Quarta-feira, 3 de Dezembro de 2014 0:32, Alan Fachini < alfakini@gmail.com> escreveu:
Oi Alessandro, deve ter uma forma mais elegante de se fazer isso no R, mas você pode usar isso aqui para solucionar seu problema rapidamente:
x <- ... # Seu data.frame aqui vars <- sapply(c(1:63), function(x) { paste('G', x, sep = "") }) new_labels <- c("Discordo totalmente", "Discordo", "Neutro", "Concordo", "Concordo totalmente")
for (var in vars) { x[[var]] <- factor(x[[var]], label = new_labels, levels = 1:5) }
Abs,
alf.
2014-12-03 0:53 GMT-02:00 Alessandro Corrêa <alessand22@yahoo.com.br>:
Prezados colegas,
Estou com um banco de dados (x) no seguinte formato
sexo idade tempo Q1 Q2 Q3 Q4 Q5 Q6 ...Q63 1 44 24.0 4 3 3 3 2 4 0 62 28.0 1 5 2 2 3 1 1 52 6.0 4 5 4 2 5 4 0 51 27.0 4 4 4 3 3 3 1 32 3.5 1 3 2 1 4 3 0 33 5.0 1 5 1 1 1 1
As variáveis de Q1 a Q6 são variáveis na escala de Likert 1 = Discordo totalmente 2 = Discordo 3 = Neutro 4 = Concordo 5 = Concordo totalmente
Gostaria de saber se é possível criar uma rotina ou se há uma função capaz de formatar as variáveis de Q1 a Q63 em fatores com as etiquetas referentes a cada nível.
Se eu fosse fazer uma a uma, repetiria 63 vezes o seguinte comando para cada variável:
x$Q1<-factor(x$Q1, label=c("Discordo totalmente", "Discordo", "Neutro", "Concordo", "Concordo totalmente"), levels=1:5)
Acredito que haja uma maneira mais prática.
Obrigado desde já.
Alessandro
_______________________________________________ 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.
_______________________________________________ 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.
_______________________________________________ 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.
-- Luís Gustavo Silva e Silva

Prezado Fernando, Sua proposta é bem intuitiva, mas deu erro na linha:transformado<-ddply(dados2,.(c(names(teste[,4:9]))),a) Erro em eval(expr, envir, enclos) : objeto 'teste' não encontrado Em que momento defino "teste'? Alessandro Em Quarta-feira, 3 de Dezembro de 2014 2:21, Fernando Antonio de souza <nandodesouza@gmail.com> escreveu: Não tão enxuta como a do Alessandro mas também resolve. dados<- structure(list(sexo = c(1L, 0L, 1L, 0L, 1L, 0L), idade = c(44L, 63L, 52L, 51L, 32L, 33L), tempo = c(24, 28, 6, 27, 3.5, 5), q1 = c(4L, 1L, 4L, 4L, 1L, 1L), q2 = c(3L, 5L, 5L, 4L, 3L, 5L), q3 = c(3L, 2L, 4L, 4L, 2L, 1L), q4 = c(3L, 2L, 2L, 3L, 1L, 1L), q5 = c(2L, 3L, 5L, 3L, 4L, 1L), q6 = c(4L, 1L, 4L, 3L, 3L, 1L)), .Names = c("sexo", "idade", "tempo", "q1", "q2", "q3", "q4", "q5", "q6"), class = "data.frame", row.names = c(NA, -6L)) library(plyr) a<-function(x){ for (i in 1:length(x)){ if (x[i] == 1) { x[i] <- "Discordo totalmente" } if (x[i] == 2) { x[i] <-"Discordo" } if (x[i] == 3) { x[i]<-"Neutro" } if (x[i] == 4) { x[i]<-"Concordo" } if (x[i] == 5) { x[i]<-"concordo totalmente" } } return(x) } nomes<-names transformado<-ddply(dados,.(c(names(teste[,4:9]))),a) is.data.frame(transformado) Em 3 de dezembro de 2014 01:32, Alessandro Corrêa <alessand22@yahoo.com.br> escreveu: Prezado Alan, O que foi isso? Mágica? Única alteração que fiz foi trocar o G pelo Q. Inclusive saltou as primeiras 3 variáveis que eram sexo, idade e tempo que não deveriam ser alteradas pela função. -----x <- ... # Seu data.frame aquivars <- sapply(c(1:63), function(x) { paste('Q', x, sep = "") })new_labels <- c("Discordo totalmente", "Discordo", "Neutro", "Concordo", "Concordo totalmente") for (var in vars) { x[[var]] <- factor(x[[var]], label = new_labels, levels = 1:5)}----Confesso que fiquei atordoado, não entendi nada, mas funcionou mesmo!Pode explicar? Já salvei dos dados em .Rdata. Muitíssimo obrigado mesmo. Alessandro Em Quarta-feira, 3 de Dezembro de 2014 0:32, Alan Fachini <alfakini@gmail.com> escreveu: Oi Alessandro, deve ter uma forma mais elegante de se fazer isso no R, mas você pode usar isso aqui para solucionar seu problema rapidamente: x <- ... # Seu data.frame aquivars <- sapply(c(1:63), function(x) { paste('G', x, sep = "") })new_labels <- c("Discordo totalmente", "Discordo", "Neutro", "Concordo", "Concordo totalmente") for (var in vars) { x[[var]] <- factor(x[[var]], label = new_labels, levels = 1:5)} Abs, alf. 2014-12-03 0:53 GMT-02:00 Alessandro Corrêa <alessand22@yahoo.com.br>: Prezados colegas, Estou com um banco de dados (x) no seguinte formato sexo idade tempo Q1 Q2 Q3 Q4 Q5 Q6 ...Q63 1 44 24.0 4 3 3 3 2 4 0 62 28.0 1 5 2 2 3 1 1 52 6.0 4 5 4 2 5 4 0 51 27.0 4 4 4 3 3 3 1 32 3.5 1 3 2 1 4 3 0 33 5.0 1 5 1 1 1 1 As variáveis de Q1 a Q6 são variáveis na escala de Likert1 = Discordo totalmente2 = Discordo 3 = Neutro 4 = Concordo 5 = Concordo totalmente Gostaria de saber se é possível criar uma rotina ou se há uma função capaz deformatar as variáveis de Q1 a Q63 em fatores com as etiquetas referentes a cada nível. Se eu fosse fazer uma a uma, repetiria 63 vezes o seguinte comando para cada variável: x$Q1<-factor(x$Q1, label=c("Discordo totalmente", "Discordo", "Neutro", "Concordo", "Concordo totalmente"), levels=1:5) Acredito que haja uma maneira mais prática. Obrigado desde já. Alessandro _______________________________________________ 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. _______________________________________________ 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.

Olá Alessandro, teste é o nome que utilizei para o dataframe. É que digitei os dados que você forneceu para testar o comando. Na função que lhe enviei você deverá substituir "teste" pelo nome de seu dataframe e selecione um subgrupo formado pela primeira coluna onde aparece q1 até a última coluna dos q' no exemplo eu selecionei este subgrupo assim teste[,4:9] isso porque as 3 primeiras colunas dos dados que envio (sexo,idade e tempo) não é para ser transformada, as colunas 4,5,6,7,8,9 , as quais referem as variávies q1,q2,q3,q4,q5,q6 é onde você deseja colocar a condificação (concordo, não concordo, etc..) para seu uso , se seu data frame esta da forma como envio, com as 3 primeiras colunas indicando sexo, idade e tempo, substitua teste[,4:9] por seudataframe[,4:ncol(seudataframe)] como o exemplo transformado<- ddply(seudataframe[,4:ncol(seudataframe)],.(c(names(seudataframe)[4:ncol(seudataframe)])),a) Eu fiz umas alteração na função hoje pela manha para melhorar a saída. Copie e cole o código abaixo em seu editor R para ver o que acontece. É necessário instalar o pacote plyr teste<-structure(list(sexo = c(1L, 0L, 1L, 0L, 1L, 0L), idade = c(44L, 63L, 52L, 51L, 32L, 33L), tempo = c(24, 28, 6, 27, 3.5, 5), q1 = c(4L, 1L, 4L, 4L, 1L, 1L), q2 = c(3L, 5L, 5L, 4L, 3L, 5L), q3 = c(3L, 2L, 4L, 4L, 2L, 1L), q4 = c(3L, 2L, 2L, 3L, 1L, 1L), q5 = c(2L, 3L, 5L, 3L, 4L, 1L), q6 = c(4L, 1L, 4L, 3L, 3L, 1L)), .Names = c("sexo", "idade", "tempo", "q1", "q2", "q3", "q4", "q5", "q6"), class = "data.frame", row.names = c(NA, -6L)) library(plyr) a<-function(x){ for (i in 1:length(x)){ if (x[i] == 1) { x[i] <- "Discordo totalmente" } if (x[i] == 2) { x[i] <-"Discordo" } if (x[i] == 3) { x[i]<-"Neutro" } if (x[i] == 4) { x[i]<-"Concordo" } if (x[i] == 5) { x[i]<-"concordo totalmente" } } return(x) } nomes<-names transformado<- ddply(teste[,4:9],.(c(names(teste)[4:9])),a) Em 3 de dezembro de 2014 16:39, Alessandro Corrêa <alessand22@yahoo.com.br> escreveu:
Prezado Fernando,
Sua proposta é bem intuitiva, mas deu erro na linha: transformado<-ddply(dados2,.(c(names(teste[,4:9]))),a) Erro em eval(expr, envir, enclos) : objeto 'teste' não encontrado
Em que momento defino "teste'?
Alessandro
Em Quarta-feira, 3 de Dezembro de 2014 2:21, Fernando Antonio de souza < nandodesouza@gmail.com> escreveu:
Não tão enxuta como a do Alessandro mas também resolve.
dados<- structure(list(sexo = c(1L, 0L, 1L, 0L, 1L, 0L), idade = c(44L, 63L, 52L, 51L, 32L, 33L), tempo = c(24, 28, 6, 27, 3.5, 5), q1 = c(4L, 1L, 4L, 4L, 1L, 1L), q2 = c(3L, 5L, 5L, 4L, 3L, 5L), q3 = c(3L, 2L, 4L, 4L, 2L, 1L), q4 = c(3L, 2L, 2L, 3L, 1L, 1L), q5 = c(2L, 3L, 5L, 3L, 4L, 1L), q6 = c(4L, 1L, 4L, 3L, 3L, 1L)), .Names = c("sexo", "idade", "tempo", "q1", "q2", "q3", "q4", "q5", "q6"), class = "data.frame", row.names = c(NA, -6L))
library(plyr)
a<-function(x){ for (i in 1:length(x)){ if (x[i] == 1) { x[i] <- "Discordo totalmente" } if (x[i] == 2) { x[i] <-"Discordo" } if (x[i] == 3) { x[i]<-"Neutro" } if (x[i] == 4) { x[i]<-"Concordo" } if (x[i] == 5) { x[i]<-"concordo totalmente" } } return(x) } nomes<-names transformado<-ddply(dados,.(c(names(teste[,4:9]))),a) is.data.frame(transformado)
Em 3 de dezembro de 2014 01:32, Alessandro Corrêa <alessand22@yahoo.com.br
escreveu:
Prezado Alan,
O que foi isso? Mágica?
Única alteração que fiz foi trocar o G pelo Q. Inclusive saltou as primeiras 3 variáveis que eram sexo, idade e tempo que não deveriam ser alteradas pela função.
----- x <- ... # Seu data.frame aqui vars <- sapply(c(1:63), function(x) { paste('Q', x, sep = "") }) new_labels <- c("Discordo totalmente", "Discordo", "Neutro", "Concordo", "Concordo totalmente")
for (var in vars) { x[[var]] <- factor(x[[var]], label = new_labels, levels = 1:5) } ---- Confesso que fiquei atordoado, não entendi nada, mas funcionou mesmo! Pode explicar?
Já salvei dos dados em .Rdata.
Muitíssimo obrigado mesmo.
Alessandro
Em Quarta-feira, 3 de Dezembro de 2014 0:32, Alan Fachini < alfakini@gmail.com> escreveu:
Oi Alessandro, deve ter uma forma mais elegante de se fazer isso no R, mas você pode usar isso aqui para solucionar seu problema rapidamente:
x <- ... # Seu data.frame aqui vars <- sapply(c(1:63), function(x) { paste('G', x, sep = "") }) new_labels <- c("Discordo totalmente", "Discordo", "Neutro", "Concordo", "Concordo totalmente")
for (var in vars) { x[[var]] <- factor(x[[var]], label = new_labels, levels = 1:5) }
Abs,
alf.
2014-12-03 0:53 GMT-02:00 Alessandro Corrêa <alessand22@yahoo.com.br>:
Prezados colegas,
Estou com um banco de dados (x) no seguinte formato
sexo idade tempo Q1 Q2 Q3 Q4 Q5 Q6 ...Q63 1 44 24.0 4 3 3 3 2 4 0 62 28.0 1 5 2 2 3 1 1 52 6.0 4 5 4 2 5 4 0 51 27.0 4 4 4 3 3 3 1 32 3.5 1 3 2 1 4 3 0 33 5.0 1 5 1 1 1 1
As variáveis de Q1 a Q6 são variáveis na escala de Likert 1 = Discordo totalmente 2 = Discordo 3 = Neutro 4 = Concordo 5 = Concordo totalmente
Gostaria de saber se é possível criar uma rotina ou se há uma função capaz de formatar as variáveis de Q1 a Q63 em fatores com as etiquetas referentes a cada nível.
Se eu fosse fazer uma a uma, repetiria 63 vezes o seguinte comando para cada variável:
x$Q1<-factor(x$Q1, label=c("Discordo totalmente", "Discordo", "Neutro", "Concordo", "Concordo totalmente"), levels=1:5)
Acredito que haja uma maneira mais prática.
Obrigado desde já.
Alessandro
_______________________________________________ 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.
_______________________________________________ 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.

Ops esqueci de terminar de colar o código. Código completo teste<-structure(list(sexo = c(1L, 0L, 1L, 0L, 1L, 0L), idade = c(44L, 63L, 52L, 51L, 32L, 33L), tempo = c(24, 28, 6, 27, 3.5, 5), q1 = c(4L, 1L, 4L, 4L, 1L, 1L), q2 = c(3L, 5L, 5L, 4L, 3L, 5L), q3 = c(3L, 2L, 4L, 4L, 2L, 1L), q4 = c(3L, 2L, 2L, 3L, 1L, 1L), q5 = c(2L, 3L, 5L, 3L, 4L, 1L), q6 = c(4L, 1L, 4L, 3L, 3L, 1L)), .Names = c("sexo", "idade", "tempo", "q1", "q2", "q3", "q4", "q5", "q6"), class = "data.frame", row.names = c(NA, -6L)) library(plyr) a<-function(x){ for (i in 1:length(x)){ if (x[i] == 1) { x[i] <- "Discordo totalmente" } if (x[i] == 2) { x[i] <-"Discordo" } if (x[i] == 3) { x[i]<-"Neutro" } if (x[i] == 4) { x[i]<-"Concordo" } if (x[i] == 5) { x[i]<-"concordo totalmente" } } return(x) } nomes<-names transformado<- ddply(teste[,4:9],.(c(names(teste)[4:9])),a) tabela_transformada <- cbind(teste[,1:3],transformado) Em 3 de dezembro de 2014 17:13, Fernando Antonio de souza < nandodesouza@gmail.com> escreveu:
Olá Alessandro, teste é o nome que utilizei para o dataframe. É que digitei os dados que você forneceu para testar o comando. Na função que lhe enviei você deverá substituir "teste" pelo nome de seu dataframe e selecione um subgrupo formado pela primeira coluna onde aparece q1 até a última coluna dos q'
no exemplo eu selecionei este subgrupo assim teste[,4:9] isso porque as 3 primeiras colunas dos dados que envio (sexo,idade e tempo) não é para ser transformada, as colunas 4,5,6,7,8,9 , as quais referem as variávies q1,q2,q3,q4,q5,q6 é onde você deseja colocar a condificação (concordo, não concordo, etc..)
para seu uso , se seu data frame esta da forma como envio, com as 3 primeiras colunas indicando sexo, idade e tempo, substitua teste[,4:9] por seudataframe[,4:ncol(seudataframe)] como o exemplo
transformado<- ddply(seudataframe[,4:ncol(seudataframe)],.(c(names(seudataframe)[4:ncol(seudataframe)])),a)
Eu fiz umas alteração na função hoje pela manha para melhorar a saída. Copie e cole o código abaixo em seu editor R para ver o que acontece. É necessário instalar o pacote plyr
teste<-structure(list(sexo = c(1L, 0L, 1L, 0L, 1L, 0L), idade = c(44L, 63L, 52L, 51L, 32L, 33L), tempo = c(24, 28, 6, 27, 3.5, 5), q1 = c(4L, 1L, 4L, 4L, 1L, 1L), q2 = c(3L, 5L, 5L, 4L, 3L, 5L), q3 = c(3L, 2L, 4L, 4L, 2L, 1L), q4 = c(3L, 2L, 2L, 3L, 1L, 1L), q5 = c(2L, 3L, 5L, 3L, 4L, 1L), q6 = c(4L, 1L, 4L, 3L, 3L, 1L)), .Names = c("sexo", "idade", "tempo", "q1", "q2", "q3", "q4", "q5", "q6"), class = "data.frame", row.names = c(NA, -6L))
library(plyr) a<-function(x){ for (i in 1:length(x)){ if (x[i] == 1) { x[i] <- "Discordo totalmente" } if (x[i] == 2) { x[i] <-"Discordo" } if (x[i] == 3) { x[i]<-"Neutro" } if (x[i] == 4) { x[i]<-"Concordo" } if (x[i] == 5) { x[i]<-"concordo totalmente" } } return(x) } nomes<-names transformado<- ddply(teste[,4:9],.(c(names(teste)[4:9])),a)
Em 3 de dezembro de 2014 16:39, Alessandro Corrêa <alessand22@yahoo.com.br
escreveu:
Prezado Fernando,
Sua proposta é bem intuitiva, mas deu erro na linha: transformado<-ddply(dados2,.(c(names(teste[,4:9]))),a) Erro em eval(expr, envir, enclos) : objeto 'teste' não encontrado
Em que momento defino "teste'?
Alessandro
Em Quarta-feira, 3 de Dezembro de 2014 2:21, Fernando Antonio de souza <nandodesouza@gmail.com> escreveu:
Não tão enxuta como a do Alessandro mas também resolve.
dados<- structure(list(sexo = c(1L, 0L, 1L, 0L, 1L, 0L), idade = c(44L, 63L, 52L, 51L, 32L, 33L), tempo = c(24, 28, 6, 27, 3.5, 5), q1 = c(4L, 1L, 4L, 4L, 1L, 1L), q2 = c(3L, 5L, 5L, 4L, 3L, 5L), q3 = c(3L, 2L, 4L, 4L, 2L, 1L), q4 = c(3L, 2L, 2L, 3L, 1L, 1L), q5 = c(2L, 3L, 5L, 3L, 4L, 1L), q6 = c(4L, 1L, 4L, 3L, 3L, 1L)), .Names = c("sexo", "idade", "tempo", "q1", "q2", "q3", "q4", "q5", "q6"), class = "data.frame", row.names = c(NA, -6L))
library(plyr)
a<-function(x){ for (i in 1:length(x)){ if (x[i] == 1) { x[i] <- "Discordo totalmente" } if (x[i] == 2) { x[i] <-"Discordo" } if (x[i] == 3) { x[i]<-"Neutro" } if (x[i] == 4) { x[i]<-"Concordo" } if (x[i] == 5) { x[i]<-"concordo totalmente" } } return(x) } nomes<-names transformado<-ddply(dados,.(c(names(teste[,4:9]))),a) is.data.frame(transformado)
Em 3 de dezembro de 2014 01:32, Alessandro Corrêa < alessand22@yahoo.com.br> escreveu:
Prezado Alan,
O que foi isso? Mágica?
Única alteração que fiz foi trocar o G pelo Q. Inclusive saltou as primeiras 3 variáveis que eram sexo, idade e tempo que não deveriam ser alteradas pela função.
----- x <- ... # Seu data.frame aqui vars <- sapply(c(1:63), function(x) { paste('Q', x, sep = "") }) new_labels <- c("Discordo totalmente", "Discordo", "Neutro", "Concordo", "Concordo totalmente")
for (var in vars) { x[[var]] <- factor(x[[var]], label = new_labels, levels = 1:5) } ---- Confesso que fiquei atordoado, não entendi nada, mas funcionou mesmo! Pode explicar?
Já salvei dos dados em .Rdata.
Muitíssimo obrigado mesmo.
Alessandro
Em Quarta-feira, 3 de Dezembro de 2014 0:32, Alan Fachini < alfakini@gmail.com> escreveu:
Oi Alessandro, deve ter uma forma mais elegante de se fazer isso no R, mas você pode usar isso aqui para solucionar seu problema rapidamente:
x <- ... # Seu data.frame aqui vars <- sapply(c(1:63), function(x) { paste('G', x, sep = "") }) new_labels <- c("Discordo totalmente", "Discordo", "Neutro", "Concordo", "Concordo totalmente")
for (var in vars) { x[[var]] <- factor(x[[var]], label = new_labels, levels = 1:5) }
Abs,
alf.
2014-12-03 0:53 GMT-02:00 Alessandro Corrêa <alessand22@yahoo.com.br>:
Prezados colegas,
Estou com um banco de dados (x) no seguinte formato
sexo idade tempo Q1 Q2 Q3 Q4 Q5 Q6 ...Q63 1 44 24.0 4 3 3 3 2 4 0 62 28.0 1 5 2 2 3 1 1 52 6.0 4 5 4 2 5 4 0 51 27.0 4 4 4 3 3 3 1 32 3.5 1 3 2 1 4 3 0 33 5.0 1 5 1 1 1 1
As variáveis de Q1 a Q6 são variáveis na escala de Likert 1 = Discordo totalmente 2 = Discordo 3 = Neutro 4 = Concordo 5 = Concordo totalmente
Gostaria de saber se é possível criar uma rotina ou se há uma função capaz de formatar as variáveis de Q1 a Q63 em fatores com as etiquetas referentes a cada nível.
Se eu fosse fazer uma a uma, repetiria 63 vezes o seguinte comando para cada variável:
x$Q1<-factor(x$Q1, label=c("Discordo totalmente", "Discordo", "Neutro", "Concordo", "Concordo totalmente"), levels=1:5)
Acredito que haja uma maneira mais prática.
Obrigado desde já.
Alessandro
_______________________________________________ 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.
_______________________________________________ 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.
participantes (4)
-
Alan Fachini
-
Alessandro Corrêa
-
Fernando Antonio de souza
-
Luis G. S. e Silva