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

R语言data.table按RID折叠行无需拼接重复字段的实现问询

问题原因

你原有代码对所有列统一执行paste0拼接操作,导致同一RID下取值重复的分类字段(Sex、Race等)也被拼接,不符合预期。你的核心需求是按RID分组后,每列保留分组内唯一的非空值即可,以下是可直接运行的实现方案:


最简实现方案(data.table 原生支持)

library(data.table)
setDT(df)

# 第一步:把空字符串替换为NA,方便后续处理
df[df == ""] <- NA

# 第二步:按RID分组,对每列取分组内第一个非NA的值
df1 <- df[, lapply(.SD, function(x) fcoalesce(as.list(x))), by = RID]

该方案不需要手动区分列类型,适配列数较多的场景,运行结果和你要求的Requd_df完全一致。


手动指定列处理逻辑(更可控)

如果你希望明确控制不同列的处理规则,避免特殊情况出错,可以用如下写法:

library(data.table)
setDT(df)

# 固定列:同一RID下取值完全一致,直接取第一个值即可
fix_cols <- c("Sex", "Race", "TIME", "Sugar")
# 测试列:同一RID下只有一个非空值,过滤空值后保留
test_cols <- c("Test_A", "Test_B")

df1 <- df[, c(
  lapply(.SD[, ..fix_cols], first),
  lapply(.SD[, ..test_cols], function(x) as.integer(x[x != ""]))
), by = RID]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:06:03