[R-br] Formatação de várias variáveis
Fernando Antonio de souza
nandodesouza em gmail.com
Quarta Dezembro 3 18:16:13 BRST 2014
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 em 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 em 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 em 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 em 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 em 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 em 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 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.
>>
>>
>>
>>
>>
>> _______________________________________________
>> 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.
>>
>>
>>
>>
>>
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20141203/eb18c297/attachment.html>
Mais detalhes sobre a lista de discussão R-br