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

R语言按x、y、cell_id指定列将多行合并为单行的高效方法

最高效处理方案(基于R的data.table包,60万行数据可秒级完成)

data.table底层为C实现,是R生态中处理结构化数据性能最高的工具,完全适配你的需求:

步骤1:加载包并转换数据格式

# 未安装先运行 install.packages("data.table")
library(data.table)
# 假设你的原始数据框名为raw_df,转为data.table对象
setDT(raw_df)

步骤2:定义分组与聚合规则

# 分组键:x、y、cell_id、population(若同分组下population不唯一,可移到聚合逻辑中取首值/均值)
group_keys <- c("x", "y", "cell_id", "population")
# 匹配所有需要合并的数值列,前缀根据你的实际字段调整:
# 如果是output开头就写 "^output\\d+$",如果是infected_DM开头就写 "^infected_DM_\\d+$"
value_cols <- grep("^infected_DM_\\d+$", names(raw_df), value = TRUE)

步骤3:分组聚合

# 聚合逻辑可按需调整:
# 同列多值相加用sum,同列只要出现非0值就取1用 function(x) as.integer(any(x > 0)),取最大值用max,取第一个非0值用 function(x) {res <- x[x!=0][1]; ifelse(is.na(res), 0, res)}
result <- raw_df[, lapply(.SD, sum), by = group_keys, .SDcols = value_cols]

步骤4:补全缺失的output列(无值补0)

# 生成0到999所有要求的列名,前缀和上面保持一致
all_cols <- paste0("infected_DM_", 0:999)
# 补全缺失列,默认值为0
missing_cols <- setdiff(all_cols, names(result))
result[, (missing_cols) := 0]
# 调整列顺序,分组列在前,output列按数字顺序排列
setcolorder(result, c(group_keys, sort(all_cols)))

可选:转回普通data.frame格式

setDF(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:15:05