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)]