Left_join与Df1和相等数据帧的列表

时间:2018-11-26 15:24:57

标签: r dataframe left-join

我在连接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截图的情况下帮助我解决这个问题。

1 个答案:

答案 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
相关问题