如何正确使用dplyr合并行共享值至新列并基于共享值合并两表
问题1:用dplyr将行中共享值合并到新列
如果你的数据存在分组共享值(比如同一类别下的多行数据),可以通过group_by()配合字符串拼接函数实现合并,无需使用which():
示例数据:
library(dplyr) library(stringr) df <- tibble( group_id = c(1,1,2,2,3), item = c("apple", "banana", "orange", "grape", "mango") )
- 保留所有行,同时新增合并列:
df %>% group_by(group_id) %>% mutate(combined_items = str_c(item, collapse = ", ")) %>% ungroup()
- 仅保留每组一行的合并结果:
df %>% group_by(group_id) %>% summarize(combined_items = str_c(item, collapse = ", ")) %>% ungroup()
问题2:基于特定共享值合并两个表格
dplyr提供了专门的连接函数,直接指定共享列即可完成合并,比which()更高效直观:
示例数据:
df1 <- tibble( user_id = c(1,2,3), name = c("Alice", "Bob", "Charlie") ) df2 <- tibble( user_id = c(2,3,4), score = c(85, 92, 78) )
常用连接方式:
- 内连接:仅保留两表都存在共享值的行
inner_join(df1, df2, by = "user_id")
- 左连接:保留左表所有行,匹配右表对应数据
left_join(df1, df2, by = "user_id")
- 全连接:保留两表所有行,缺失值补NA
full_join(df1, df2, by = "user_id")
若两表共享列名不同,可指定对应关系:
left_join(df1, df2, by = c("id" = "user_id"))
内容的提问来源于stack exchange,提问作者Duston Gladfelter
相关产品推荐
相关产品推荐

