根据行名称将列合并到一个数据帧
问题描述:
我有一个数据帧,其中包含一个变量,该级别出现多次,第二个数据帧包含此变量的唯一级别的代码。我想将包含代码的列添加到我的数据框中。这可以通过一个例子来最好地说明:根据行名称将列合并到一个数据帧
f1 <- rep(c("A","B","C"), each = 3)
df1 <- data.frame(f1,v1=runif(9))
f1 v1
1 A 0.83523506
2 A 0.13833162
3 A 0.15354252
4 B 0.62046499
5 B 0.27823892
6 B 0.04629973
7 C 0.85571269
8 C 0.10963561
9 C 0.70576556
df2 <- data.frame(f1=c("A","B","C"), n1=c("sp1","sp2","sp3"))
f1 n1
1 A sp1
2 B sp2
3 C sp3
df3 <- data.frame(f1=rep(c("A","B","C"),each = 3),n1=rep(c("sp1","sp2","sp3"),each =3),v1=df1$v1)
f1 n1 v1
1 A sp1 0.83523506
2 A sp1 0.13833162
3 A sp1 0.15354252
4 B sp2 0.62046499
5 B sp2 0.27823892
6 B sp2 0.04629973
7 C sp3 0.85571269
8 C sp3 0.10963561
9 C sp3 0.70576556
我想找到一个函数来获取df3。
答
有很多使用基本功能merge
方式
很简单
merge(df1,df2)
这里是另外一个使用dplyr
library(dplyr)
df1 %>%
left_join(df2)
# f1 v1 n1
#1 A 0.2283936 sp1
#2 A 0.3709602 sp1
#3 A 0.2508059 sp1
#4 B 0.5654418 sp2
#5 B 0.3206994 sp2
#6 B 0.2529365 sp2
#7 C 0.7200121 sp3
#8 C 0.5247517 sp3
#9 C 0.1914874 sp3
我的号码与你的变化,你没有使用set.seed
设置随机数的生成
非常感谢你,它完美的作品。 – user34771 2014-09-04 15:26:27
它似乎有效,但在检查结果后,我注意到由于合并df而出现了一些NA值。可能是因为要合并的变量的级别不是相同的顺序?如何充分发挥? – user34771 2014-09-04 15:47:42
好吧,你需要制作一个更长的例子。不管你的dfs在什么顺序都不重要,因为合并在工作时执行排序。您可以尝试合并(df1,df2,by =“f1”),以便对您正在合并的变量进行超级特定。 – jalapic 2014-09-04 16:03:30