根据行名称将列合并并扩展到数据框

时间:2014-09-04 14:49:52

标签: r merge dataframe

我有一个带变量的数据框,该等级出现多次,第二个数据框包含该变量唯一等级的代码。我想在我的数据帧中添加一个包含代码的列。最好通过一个例子说明这一点:

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的函数。

1 个答案:

答案 0 :(得分:0)

有很多方法

使用基函数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来设置随机数生成