在R语言中基于另一列值的计数新增列
解决方案
你可以使用base R中的ave()函数生成每个comment_id组内的序号,配合paste()完成拼接:
comment_id <- c(1, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10) cat <- c("acc_sp", "acc_lex", "org_gen", "acc_gen", "ran_lex", "arg_rel", "len", "org_lay", "org_spe", "org_gen", "coh_link") df <- data.frame(comment_id, cat) # 生成目标列 df$comment_cat_id <- paste(df$comment_id, ave(df$comment_id, df$comment_id, FUN = seq_along), sep = "_")
代码说明:
ave(df$comment_id, df$comment_id, FUN = seq_along):按comment_id分组,为每个组内的元素生成从1开始的连续序号,比如comment_id=2的组会生成c(1,2)。paste(...)将comment_id和对应的序号用下划线拼接,得到你需要的comment_cat_id格式。
结果验证:
查看前5行的comment_cat_id:
head(df$comment_cat_id, 5) # 输出:"1_1" "2_1" "2_2" "3_1" "4_1"
如果你习惯用tidyverse工具链,也可以用dplyr实现:
library(dplyr) df <- df %>% group_by(comment_id) %>% mutate(comment_cat_id = paste(comment_id, row_number(), sep = "_")) %>% ungroup()
内容的提问来源于stack exchange,提问作者Peter Thwaites
相关产品推荐
相关产品推荐

