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

R中按多列合并行并自动取各列最后非空值的实现方案

方案1:纯dplyr实现(自动适配所有非分组列)

先定义通用取值函数,支持你提到的三类MUSH场景灵活切换,无需调整聚合逻辑:

library(dplyr)

# 可按需修改取值规则
get_target_val <- function(x) {
  # 取最后一个非空值:last(na.omit(x))
  # 取第一个非空值:first(na.omit(x))
  # 取最后一个值(无论是否为空):last(x)
  last(na.omit(x))
}

# 聚合逻辑完全不绑定非分组列,新增字段无需修改代码
res <- d %>%
  group_by(STUDENTID, SUBJECT) %>%
  summarise(across(everything(), get_target_val), .groups = "drop")

该方案直接按分组返回单行结果,比原实现的mutate+去重逻辑更简洁,运行结果与预期完全一致。


方案2:data.table实现(性能更优,适合大数据量场景)

如果日常处理数据量级较大,data.table的执行效率会更高,同样支持自动适配所有非分组列:

library(data.table)
setDT(d) # 转换为data.table格式

# 通用取值函数,规则修改同上
get_target_val <- function(x) {
  last(na.omit(x))
}

# 按分组聚合
res <- d[, lapply(.SD, get_target_val), by = .(STUDENTID, SUBJECT)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:42:01