加入时将行插入组

Inserting rows into groups while joining

我正在尝试在 R 中加入两个 data.tables。我按名称加入它们,我想将一个数据 table 中的 "insert" 行放入另一个数据的名称组中.

例如: 数据 table A 有 "names" 和 "amounts",数据 table B 有 "names" 和 "addresses"(但每个名称有多个地址)。我想要一个数据 table,其中包含每个名称、相应的地址以及每组名称的单个 "amount"。

我尝试在 dplyr 中使用 "left_join",但是每个 "address" 行的金额列都会重复。

有人有什么想法吗?谢谢。

示例图片(连接 table 1 和 2 创建 3):

甚至像这样:

编辑:添加了一个可重现的示例,说明这两个数据集是什么样的以及所需的输出是什么

table_one <- data.frame(name=c("x","y","z"), amount=c("0","200","300"))
table_two <- data.frame(name=c("x","x","y","z","z","z"), address=c("A","B","C","D","E","F"))

output <- data.frame(name=c("x","x","y","z","z","z"), 
                     address=c("A","B","C","D","E","F"), amount=c("0","","0","0","",""))

给你。

table_one <- data.frame(name=c("x","y","z"), amount=c("0","0","0"))
table_two <- data.frame(name=c("x","x","y","z","z","z"), address=c("A","B","C","D","E","F"))

output <- data.frame(name=c("x","x","y","z","z","z"), 
                     address=c("A","B","C","D","E","F"), amount=c("0","","0","0","",""))


test <- merge(table_one, table_two, by = 'name')
test$amount <- as.character(test$amount)
test$amount[duplicated(test[,c(1,2)])] <- ""
test

使用dplyr,

library(dplyr)

left_join(table_two, table_one, by = 'name') %>% 
   mutate(amount = replace(amount, duplicated(name), NA))
#  name address amount
#1    x       A   0
#2    x       B   <NA>
#3    y       C    200
#4    z       D    300
#5    z       E   <NA>
#6    z       F   <NA>

我们可以用 match

i1 <- with(table_one, match(name, table_two$name))
table_two$amount <- ""
table_two$amount[i1] <- as.character(table_one$amount)
table_two
#   name address amount
#1    x       A   0
#2    x       B       
#3    y       C    200
#4    z       D    300
#5    z       E       
#6    z       F