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

如何基于NA值特定条件合并多个data.table并计算perf均值

合并多个data.table并按条件计算perf列平均值

我来帮你搞定这个问题!要合并多个结构相同的data.table,并按row_names分组计算perf的平均值,同时满足**只要分组内存在NA值就不执行均值计算(返回NA)**的要求,咱们可以按以下步骤操作:

步骤1:加载data.table包并准备示例数据

首先确保你已经加载了data.table包,然后定义你的示例数据表:

library(data.table)

dt1 <- data.table(row_names=1:5, perf=c(2,NA,NA,3,NA), ticker=rep("aa",5))
dt2 <- data.table(row_names=1:5, perf=c(NA,1,2,5,NA), ticker=rep("aapl",5))

步骤2:合并所有data.table

用rbindlist()函数可以高效合并多个同结构的data.table,只需要把所有表放进一个列表里传入即可:

combined_dt <- rbindlist(list(dt1, dt2))

步骤3:按row_names分组并计算符合条件的均值

这里我们需要先判断每个分组内的perf值是否全部为非NA,只有满足这个条件时才计算均值,否则返回NA:

result_dt <- combined_dt[, .(avg_perf = if(all(!is.na(perf))) mean(perf) else NA_real_), by = row_names]

代码解释:

  • by = row_names:指定按row_names字段进行分组
  • all(!is.na(perf)):检查当前分组里的所有perf值是否都不是缺失值
  • 条件成立时计算mean(perf)(因为全是非NA值,不需要额外处理);不成立时返回NA_real_(保证结果列是数值类型,避免类型混乱)

最终结果

运行上述代码后,result_dt的输出如下:

row_names avg_perf
1:         1       NA
2:         2       NA
3:         3       NA
4:         4        4
5:         5       NA

如果你实际需求是忽略NA值计算非NA数据的均值(哪怕分组里有NA也计算),可以用更简单的代码:

result_dt <- combined_dt[, .(avg_perf = mean(perf, na.rm = TRUE)), by = row_names]

此时输出会是:

row_names avg_perf
1:         1        2
2:         2        1
3:         3        2
4:         4        4
5:         5      NaN

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:44:05