根据行名称将列合并到一个数据帧

根据行名称将列合并到一个数据帧

问题描述:

我有一个数据帧,其中包含一个变量,该级别出现多次,第二个数据帧包含此变量的唯一级别的代码。我想将包含代码的列添加到我的数据框中。这可以通过一个例子来最好地说明:根据行名称将列合并到一个数据帧

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设置随机数的生成

+0

非常感谢你,它完美的作品。 – user34771 2014-09-04 15:26:27

+0

它似乎有效,但在检查结果后,我注意到由于合并df而出现了一些NA值。可能是因为要合并的变量的级别不是相同的顺序?如何充分发挥? – user34771 2014-09-04 15:47:42

+0

好吧,你需要制作一个更长的例子。不管你的dfs在什么顺序都不重要,因为合并在工作时执行排序。您可以尝试合并(df1,df2,by =“f1”),以便对您正在合并的变量进行超级特定。 – jalapic 2014-09-04 16:03:30