【发布时间】:2019-03-22 18:53:37
【问题描述】:
我有一个非常混乱的数据集需要预处理。 我想更改所有变量并手动添加级别信息,因此我试图创建一个使用 mutate 的循环。
我设法创建了一个列表,其中包含我需要在数据框中更改的变量的行号(例如 varstochange)。我还生成了两个列表,第一个具有此变量具有的级别(请参阅 levelnumbers),第二个具有要使用的标签(请参阅 levelnames)。
我对循环很陌生,使用 magittr 的写作方式使用 mutates 变得很困难
tempdat<- data.frame(location=c("1","2","3","1","2","3","1","2","1"),job=c(1,0 ,1,0,1,0,1,0,1),age=c(12,12,13,14,15,13,1,14,14))
varstochange<-c(1,2)
levelnames<-list()
levelnames[[1]]=c("Europe","Africa","Asia")
levelnames[[2]]=c("yes","no")
levelnumbers<-list()
levelnumbers[[1]]=c("1","2","3")
levelnumbers[[2]]=c("0","1")
我试图写这样的东西,但真的不知道从哪里开始以及如何告诉函数从三个独立列表中选择元素并将其输入到 mutate 循环中......
这就是我卡住的地方。
for (i in 1:length(varstochange)){
input<-tempdat%>%
mutate(varstochange[i]=factor(tempdat[i],levels=c(unlist(levelnumbers[i])),l abels=c(unlist(levels_names[i])),order=TRUE))
}
最后,我希望有一个数据集,它只将变量的格式更改为“varstochange”上的格式,并且具有在其他两个列表中定义的级别的结构。
如果能帮我完成这项工作,我将不胜感激 谢谢!
【问题讨论】:
-
您需要重新编码多少列?您是只有几列的多个级别,还是也有很多列?
-
如果有很多列,你能假设
tempdat和level列表的顺序正确吗?