R 在数据帧中使用匹配的数据帧合并填充NAs
我有三个数据帧。一个“主”数据帧,我想将其他两个子数据帧合并到其中R 在数据帧中使用匹配的数据帧合并填充NAs,r,dataframe,merge,R,Dataframe,Merge,我有三个数据帧。一个“主”数据帧,我想将其他两个子数据帧合并到其中 main = data.frame(a = LETTERS[1:5], b = round(rnorm(5),2)) a b A 0.41 B -1.06 C -0.65 D -1.27 E 1.03 sub1 = data.frame(a = LETTERS[2:4], c = sample(c(100, 200, 300), 3, replace=T)) a c B 200 C 200 D 200 s
main = data.frame(a = LETTERS[1:5], b = round(rnorm(5),2))
a b
A 0.41
B -1.06
C -0.65
D -1.27
E 1.03
sub1 = data.frame(a = LETTERS[2:4], c = sample(c(100, 200, 300), 3, replace=T))
a c
B 200
C 200
D 200
sub2 = data.frame(a = LETTERS[c(1,5)], c = sample(c(999, 888), 2, replace=T))
a c
A 999
E 888
在第一次合并中,我想通过“a”
将sub1
合并到main
,这样就行了
merged1 = merge(main, sub1, by="a", all.x=T)
a b c
A 0.41 NA
B -1.06 300
C -0.65 300
D -1.27 100
E 1.03 NA
现在我想将sub2
加入/合并到merged1
。在我的例子中,sub2
提供的值替换c列中的NAs。具体来说,我想用sub2
中的值替换这些NAs。我尝试了这个(以及all.x
,all.y
的其他参数):
merge(merged1, sub2, by="a", all.x=T)
a b c.x c.y
A 0.41 NA 999
B -1.06 300 NA
C -0.65 300 NA
D -1.27 100 NA
E 1.03 NA 999
我如何才能使它成为合并后的唯一一列c?注意:我的种子已设置,因此结果与问题中的结果不同
如果将sub1或sub2绑定在一起,则可以在一次合并中完成所有操作
set.seed(42)
main = data.frame(a = LETTERS[1:5], b = round(rnorm(5),2))
sub1 = data.frame(a = LETTERS[2:4], c = sample(c(100, 200, 300), 3, replace=T))
sub2 = data.frame(a = LETTERS[c(1,5)], c = sample(c(999, 888), 2, replace=T))
#Create one data frame
all_sub <- rbind(sub1,sub2)
merged <- merge(main, all_sub, by="a", all.x=T)
注意:我的种子已设定,因此结果与问题中的结果不同
如果将sub1或sub2绑定在一起,则可以在一次合并中完成所有操作
set.seed(42)
main = data.frame(a = LETTERS[1:5], b = round(rnorm(5),2))
sub1 = data.frame(a = LETTERS[2:4], c = sample(c(100, 200, 300), 3, replace=T))
sub2 = data.frame(a = LETTERS[c(1,5)], c = sample(c(999, 888), 2, replace=T))
#Create one data frame
all_sub <- rbind(sub1,sub2)
merged <- merge(main, all_sub, by="a", all.x=T)
在生成这些数据帧时,请使用1)设置种子编号,以使其可复制。2) 在命名约定上保持一致…创建数据帧“sub1”和“main”,但在合并中使用“df_main”和“df_sub1”。3) 检查您的示例的准确性。似乎df_sub1和sub1是不同的,因为后者包含300,但前者仅包含200。只需
rbind(df_sub1,df_sub2)
并合并到其中,而不是单独的小合并。您可能需要将factor列转换为character以成功地rbind
。我认为唯一的其他选项是使用a进行后期处理。也许match
也是一个选项:merged1$c[match(sub2$a,merged1$a)]您是否可以1)在生成这些数据帧时使用设置种子编号,以便它们是可复制的。2) 在命名约定上保持一致…创建数据帧“sub1”和“main”,但在合并中使用“df_main”和“df_sub1”。3) 检查您的示例的准确性。似乎df_sub1和sub1是不同的,因为后者包含300,但前者仅包含200。只需rbind(df_sub1,df_sub2)
并合并到其中,而不是单独的小合并。您可能需要将factor列转换为character以成功地rbind
。我认为唯一的其他选项是使用a进行后期处理。也许match
也是一个选项:merged1$c[match(sub2$a,merged1$a)]