【问题标题】:Conditional calculation of means of different columns in data.table with R用R条件计算data.table中不同列的平均值
【发布时间】:2014-08-09 12:04:10
【问题描述】:

Here 讨论了向量 t 的平均值和中位数的计算问题,对于向量 y 的每个值(从 1 到 4),其中 x = 1, z = 1,使用R中的aggregate函数。

 x y  z  t
 1 1  1 10
 1 0  1 15
 2 NA 1 14
 2 3  0 15
 2 2  1 17
 2 1 NA 19
 3 4  2 18
 3 0  2 NA
 3 2  2 45
 4 3  2 NA
 4 1  3 59
 5 0  3 0
 5 4  3 45
 5 4  4 74
 5 1  4 86

但是我如何才能为向量 x 的每个值(从 1 到 5)计算 (mean(y)+mean(z))/(mean(z)-mean(t)) 而不对任何向量中的值 0NA 进行计算?例如,在向量 y 中,第三个值是 0,因此不应使用每个向量 (y,z,t) 中的第三个数字。结果第三行(x = 3)应该是NA

这里是计算y,zt均值的代码,需要加上计算(mean(y)+mean(z))/(mean(z)-mean(t))的公式:

data <- data.table(dataframe)
bar <- data[,.N,by=x]
foo <- data[ ,list(mean.y  =mean(y, na.rm = T),
               mean.z=mean(z, na.rm = T),
               mean.t=mean(t,na.rm = T)),
         by=x]     

在此计算代码中表示使用所有行,但对于计算(mean(y)+mean(z))/(mean(z)-mean(t)),不应使用任何行,其中 yzt 等于零或NA

【问题讨论】:

  • 这是 Cross Validated 的 OT,因为它并没有真正解决 统计 问题。我很欣赏您正在进行数据分析,但您的问题的解决方案仅限于简单地找到正确的咒语以使 R 做您想做的事。正如我所提到的,这些问题在这里是过时的,但这适合Stack Overflow

标签: r data.table aggregation


【解决方案1】:

您可以先对数据进行子集化。

subdata <- data[which(data$y != 0 & data$z !=0 & data$t !=0 & 
!is.na(data$y) & !is.na(data$z) & !is.na(data$t)),]

现在您有了原始数据框的一个子集,其中不包含 0 或 NA 的行。然后您可以通过 x 应用您的用户定义函数来聚合“子数据”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-26
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 2014-09-01
    • 2017-10-04
    • 2022-12-02
    相关资源
    最近更新 更多