R如何计算数据框每行中高于该行总均值的列的平均值
错误原因
你的代码运行失败的核心原因有两个:
apply(data, 1, ...)执行时会将你后续新增的mn列也纳入每行的取值范围,而你计算时仅需要用到前三列的日期数值列- 匿名函数中
x > data$mn的data$mn是包含所有行均值的长度为5的向量,而非当前行对应的均值,逻辑完全不匹配
正确实现代码
简洁一步版(无需提前生成mn列)
# 仅遍历前三列数值,每行先算总均值,再筛选大于总均值的数计算平均 data$mintensity <- apply(data[, 1:3], 1, function(row) { total_mean <- mean(row) mean(row[row > total_mean]) })
保留mn列版本
如果你需要单独存储每行总均值,可以拆分实现:
# 计算每行总均值 data$mn <- apply(data[, 1:3], 1, mean) # 计算符合条件的均值 data$mintensity <- mapply(function(val_row, mn_row) { mean(val_row[val_row > mn_row]) }, as.data.frame(t(data[, 1:3])), data$mn)
最终输出结果
01-01-2018 02-01-2018 03-01-2018 mn mintensity 1 1.2 -0.1 3.4 1.5000000 3.40 2 3.1 2.4 -2.6 0.9666667 2.75 3 0.7 4.9 -1.8 1.2666667 4.90 4 -0.3 -3.3 0.1 -1.1666667 -0.10 5 2.0 -2.7 0.3 -0.1333333 1.15
内容的提问来源于stack exchange,提问作者nflore
相关产品推荐
相关产品推荐

