You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言中合并首元素相同的列表子项的实现方法

问题根因

你的代码输出不符合预期有两个核心原因:

  • 调用rbind.data.frame时默认开启了字符串转因子规则,v1列实际存储的是因子对应的整数索引而非原始字符串,强制转字符时会得到索引值1/2/3/4,而非预期的12/13/22/30
  • 对tibble行子集直接调用as.character会优先读取因子的底层存储值,无法得到原始文本内容

修正实现方案

方案1:基于你原有dplyr逻辑修改

library(dplyr)
# 原始列表
v <- list(c("12", "1"), c("12", "2"), c("12", "3"), c("13", "1"), c("22", "3"), c("30", "4"))
# 构造数据框时禁用字符串转因子
vv <- do.call(rbind.data.frame, c(v, stringsAsFactors = FALSE))
names(vv) <- c("v1", "v2")
# 分组拼接第二个元素
vvv <- vv %>%
  group_by(v1) %>%
  summarise(v3 = paste0(v2, collapse = ","))
# 按行构造目标列表
w <- lapply(1:nrow(vvv), function(i) c(vvv$v1[i], vvv$v3[i]))

输出验证:

> w
[[1]]
[1] "12"    "1,2,3"

[[2]]
[1] "13" "1" 

[[3]]
[1] "22" "3" 

[[4]]
[1] "30" "4" 

方案2:基础R无依赖实现(更简洁)

不需要加载dplyr等额外包,直接用基础函数完成:

v <- list(c("12", "1"), c("12", "2"), c("12", "3"), c("13", "1"), c("22", "3"), c("30", "4"))
# 按子项首元素分组
grouped <- split(sapply(v, `[`, 2), sapply(v, `[`, 1))
# 拼接第二个元素后转换为目标列表格式
w <- lapply(names(grouped), function(k) c(k, paste(grouped[[k]], collapse = ",")))

内容的提问来源于stack exchange,提问作者esti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 14:15:04