我有一个大的数据集,我需要从其他两个较小的数据集的信息完成。大型数据集就像
df_large <- data.frame(letters = letters[1:5],
numbers = 1:5,
client = c("client1", "client2", "client3", "client4", "client4"),
other = c("other1", "other2", "other1", "other4", "other4")
)
这将由来自其他两个较小数据集的信息完成,
df2 <- data.frame(numbers = 1:3,
info = c("info1", "info2", "info3"),
invoice = c(100, 150, 200))
和
df3 <- data.frame(letters = letters[4:5],
info = c("info4", "info5"),
product = c("phone", "laptop"))
我需要合并两个较小的数据集,并使用它们来完成最大数据集中的信息。问题是两个表的键不一样:一个具有变量numbers
,另一个具有变量letters
。所以我希望得到这样的结果:
# A tibble: 5 × 6
letters numbers client other info product
<chr> <int> <chr> <chr> <chr> <chr>
1 a 1 client1 other1 info1 NA
2 b 2 client2 other2 info2 NA
3 c 3 client3 other1 info3 NA
4 d 4 client4 other4 info4 phone
5 e 5 client4 other4 info5 laptop
我尝试的是:首先,我执行了left_join(df_large, df2)
,它工作得很好,并使用这两个表生成了预期的结果。然而,当加入第三个时,缺少一些信息:
test_table <- left_join(df_large, df2) #this works well
result <- left_join(test_table, df3,
by = "letters")
上面的代码生成了一个表,其中df2
和df3
中的公共列被重命名为info.x
和info.y
,而不是合并,如下所示:
# A tibble: 5 × 8
letters numbers client other info.x invoice info.y product
<chr> <int> <chr> <chr> <chr> <dbl> <chr> <chr>
1 a 1 client1 other1 info1 100 NA NA
2 b 2 client2 other2 info2 150 NA NA
3 c 3 client3 other1 info3 200 NA NA
4 d 4 client4 other4 NA NA info4 phone
5 e 5 client4 other4 NA NA info5 laptop
如何将公共列保留为公共列而不丢失任何信息?
1条答案
按热度按时间67up9zun1#
将
df_large
连接到df2
后,只需从另一个表中填充NA
值。解决这个问题的一种方法是使用dplyr::rows_update()
。rows_update()
修改现有的行(类似于UPDATE
[在SQL中])。y
中的键值必须是唯一的,默认情况下,y
中的键值必须存在于x中。