【发布时间】:2016-10-23 10:26:03
【问题描述】:
下面是两个简单的数据框。我想重新编码(折叠)Sat1 和Sat2 列,以便所有满意程度都简单地编码为Satisfied,所有不满意程度都编码为Dissatisfied。中性将保持中性。因此,这些因素将具有三个级别 - Satisfied, Dissatisfied, and Neutral。
我通常会通过绑定数据帧并使用lapply 以及car 包中的重新编码来完成此操作,例如:
DF1[2:3] <- lapply(DF1[2:3], recode, c('"Somewhat Satisfied"= "Satisfied","Satisfied"="Satisfied","Extremely Dissatisfied"="Dissatisfied"........etc, etc
我想使用地图功能来完成这项工作,特别是来自purrr 的at_map(维护数据框,但我是purrr 的新手,所以请随时建议其他版本的地图),以及如dplyr, tidyr,stringrandggplot2` 所以一切都可以很容易地流水线化。
下面的例子是我想要完成的,但是为了重新编码,但我无法让它工作。
http://www.r-bloggers.com/using-purrr-with-dplyr/
我想使用at_map或类似的map函数,这样我就可以保留Sat1和Sat2的原始列,所以重新编码的列将被添加到数据框中并重命名。如果这个步骤也可以包含在一个函数中,那就太好了。
实际上,我会有很多数据框,所以我只想重新编码一次因子水平,然后使用purrr 中的一个函数以最少的代码量对所有数据框进行更改。
Names<-c("James","Chris","Jessica","Tomoki","Anna","Gerald")
Sat1<-c("Satisfied","Very Satisfied","Dissatisfied","Somewhat Satisfied","Dissatisfied","Neutral")
Sat2<-c("Very Dissatisfied","Somewhat Satisfied","Neutral","Neutral","Satisfied","Satisfied")
Program<-c("A","B","A","C","B","D")
Pets<-c("Snake","Dog","Dog","Dog","Cat","None")
DF1<-data.frame(Names,Sat1,Sat2,Program,Pets)
Names<-c("Tim","John","Amy","Alberto","Desrahi","Francesca")
Sat1<-c("Extremely Satisfied","Satisfied","Satisfed","Somewhat Dissatisfied","Dissatisfied","Satisfied")
Sat2<-c("Dissatisfied","Somewhat Dissatisfied","Neutral","Extremely Dissatisfied","Somewhat Satisfied","Somewhat Dissatisfied")
Program<-c("A","B","A","C","B","D")
DF2<-data.frame(Names,Sat1,Sat2,Program)
【问题讨论】:
-
您希望所有数据帧最终合并还是单独存储在一个列表中,还是...?这似乎相当简单,例如来自 dplyr_0.4.3.9000 的
mutate_each结合map或map_df。map_at看起来像是替换了当前变量,所以可能不是在这种情况下使用的工具。 -
感谢您的回复。我想如果数据框单独保留在列表中就可以了。我的主要目标是找到一种快速方法(在 purrr dplyr 管道中),这将允许我一次性重新编码跨多个数据帧的因素。我喜欢结合 mutate_each 和 map 函数的想法。如果当前变量被替换就可以了,因为我可以先复制数据帧。因此,如果您能展示您的示例的代码,我将不胜感激。