R dplyr实现按id分组拼接number列并根据分组长度适配分隔符
解决方案
你可以先自定义一个符合拼接规则的辅助函数,再配合dplyr的分组操作即可实现需求,完整代码如下:
library(tidyverse) # 自定义符合分隔规则的拼接函数 knit_numbers <- function(x) { n <- length(x) if (n == 1) { return(x) } else if (n == 2) { return(paste(x, collapse = " and ")) } else { return(paste0(paste(x[-n], collapse = ", "), " and ", x[n])) } } # 分组后生成numbers列 result <- names %>% group_by(id) %>% mutate(numbers = knit_numbers(number)) %>% ungroup()
运行上述代码后得到的result和你给出的预期输出完全一致。
逻辑说明
- 自定义的
knit_numbers函数会根据输入向量的长度自动选择分隔符,完全匹配要求的三种拼接规则 - 按
id分组后调用该函数,会把对应id下的所有number值传入函数计算,同一个分组下所有行的numbers结果完全相同,不会只拼接当前行的值 - 不需要额外安装其他扩展包,仅依赖
dplyr的基础分组和修改列功能即可实现。
内容的提问来源于stack exchange,提问作者R.W.
相关产品推荐
相关产品推荐

