Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 基于行名称将列合并并扩展为数据帧_R_Merge_Dataframe - Fatal编程技术网

R 基于行名称将列合并并扩展为数据帧

R 基于行名称将列合并并扩展为数据帧,r,merge,dataframe,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.2782389

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

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
f1有很多方法

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

它似乎有效,但在检查结果后,我注意到合并df后出现了一些NA值。可能是因为要合并的变量的级别顺序不同吗?如何充分地重新调整?嗯,您需要生成一个较长的示例。dfs的顺序应该无关紧要,因为merge在工作时执行排序。您可以尝试合并(df1,df2,by=“f1”)以非常明确地说明要合并的变量。谢谢,我将尝试修复它。我将控制所有变量的名称,以确保没有不匹配。