用R计算data.table中不同列的均值的条件

时间:2014-06-19 01:28:27

标签: r data.table aggregation

Here讨论了向量 t 的均值和中位数的计算问题,对于向量 y (从1到4)的每个值,其中< em> 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 中,第3个值为0,因此不应使用每个向量中的第3个数字( y,z,t )。在结果中,第三行( x = 3)应为NA

以下是计算 y,z t 的均值的代码,需要添加计算(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)),不应在 y z t 等于零或NA

1 个答案:

答案 0 :(得分:0)

您可以先对数据进行分组。

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应用您的用户定义函数来聚合“subdata”。