使用dplyr合并变量相同的两个数据框并生成分组标识变量的最简实现方法
使用dplyr合并数据框并添加分组标识的最简方法
这题用dplyr的bind_rows()配合.id参数就能一步解决,绝对是最简洁的方案了!
先还原你的数据创建代码:
dfA <- c('y','x','z') dfB <- c(345, 443, 123) a <- data.frame(dfA,dfB) b <- data.frame(dfA,dfB)
核心合并代码就一行:
library(dplyr) # 合并并自动生成group列 combined_df <- bind_rows(a = a, b = b, .id = "group")
默认得到的结果是先显示a的所有行,再显示b的所有行:
dfA dfB group 1 y 345 a 2 x 443 a 3 z 123 a 4 y 345 b 5 x 443 b 6 z 123 b
如果想要严格匹配你给出的按dfA分组交替显示a和b的顺序,只需要再加一步排序:
combined_df <- bind_rows(a = a, b = b, .id = "group") %>% arrange(dfA, group)
这样就能得到和你示例完全一致的输出:
dfA dfB group 1 y 345 a 2 y 345 b 3 x 443 a 4 x 443 b 5 z 123 a 6 z 123 b
为什么这是最简方案?
bind_rows()的.id参数就是专门为这种场景设计的:当你传入命名的数据框(比如这里的a = a和b = b),它会自动把每个数据框的名字作为group列的取值,不需要先给a、b手动添加group列再合并,省掉了额外的步骤,代码简洁又直观。
内容的提问来源于stack exchange,提问作者persephone
相关产品推荐
相关产品推荐

