我在连接4个数据帧时遇到问题。我在安全的环境中使用远程访问,因此很遗憾,我无法为您提供R会话和代码的屏幕截图。
我有R版本3.4.1 和包装tidyverse
Df1-一个数据框包含280000行和20个变量,这是我的主要数据集,它包含诊断数据,医院部门和位置数据。
HA1,HA2,HA3-其他3个数据集各有23至2500万行和7个变量,所有3个数据集中的变量均相等。这些数据集包含有关3年的医疗保健活动的数据。
我想使用带有left_join的变量“ A”来连接这些数据集。如上所示,仅将HAf1-3中具有与Df1诊断/医院相匹配的医疗保健活动保留。
我尝试将其作为HA1的测试:
test = left_join(Df1, HA1, by= "A")
这很好。 但是在我尝试将HA2和HA3添加到数据集之后,它添加了新变量,而不是填写HA1已经添加的变量的NA。 (var.x,var.y)
test2 = left_join (test, HA2, by= "A")
test3 = left_join (test2, HA3, by= "A")
此后,我在HA数据集上尝试了rbind,但它们太大了,并且出现错误:“无法分配大小向量。”。
所以我尝试了带有reduce函数的purrr软件包,但是我遇到了同样的问题
list(Df1, HA1, HA2, HA3) %>% reduce(left_join, by = "A")
我要制作的数据集具有Df 1的20个变量和HA1-3的7个变量。我尝试一次将HA数据集的7个变量添加到Df1,并将HA1-3的所有匹配项添加到同一列中。
希望您可以在没有R截图的情况下帮助我解决这个问题。
答案 0 :(得分:1)
left_join将始终添加新列,而不是填充现有列。一个简单的解决方案是使用coalesce
将三个新列合并为一个。这是一个包含虚拟数据和三个数据帧的示例:
d<-data.frame(A=LETTERS[1:5])
e<-data.frame(A=LETTERS[1:3],b=1:3)
f<-data.frame(A=LETTERS[4:5],b=4:5)
left_join(d,e,by="A") %>% left_join(f,by="A") %>%
mutate(newb=coalesce(b.x,b.y))
A b.x b.y newb
1 A 1 NA 1
2 B 2 NA 2
3 C 3 NA 3
4 D NA 4 4
5 E NA 5 5