以dt计算平均值

时间:2018-05-15 12:37:55

标签: datatable

我的控制台中出现了一个名称和年份

的数据透视表

所以我想要做的第一件事就是我要删除使用数据表总和为零的所有行(在本例中为行C)。 我修改了这个代码,完全可以在我的数据表

上完成
>dt[apply(dt, 1, function(x) min(x) != max(x)), ]

这段代码可以得到我想要的但是没有用。

>dt[apply(dt, 1, function(x) sum(x) = 0, ]

我的第二个问题是我想在不考虑零的情况下计算所有行的平均值。

有谁知道这两个问题的正确代码?

谢谢:)

2 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

# remove row with zeros
df <- df[apply(df[,-1],1, function(x)sum(x) != 0),]

# calculate mean without zeros
df$new_col  <- apply(df[,-1],1, function(x) mean(x[x!=0]))

print(df)

      random X2000 X2001 X2002 X2003 X2004 X2005 new_col
1      A     1     0     2     1     4     5     2.60
2      B     1     1     0     1     1     1     1.00
4      D     2     2     2     2     2     2     2.00
5      E     2     3     0     0     1     1     1.75
6      F     0     1     1     0     0     0     1.00
7      G     3     3     3     3     3     3     3.00

答案 1 :(得分:1)

我们可以使用rowSums删除所有0的行,然后通过将0&#39转换为rowMeans并使用NA来使用na.rm = TRUE每行mean

i1 <-  rowSums(!!df1[-1]) != 0
df1 <- df1[i1,]
df1$new_col <- rowMeans(df1[-1]*NA^(!df1[-1]), na.rm = TRUE)
df1$new_col
#[1] 2.60 1.00 2.00 1.75 1.00 3.00