我的控制台中出现了一个名称和年份
的数据透视表所以我想要做的第一件事就是我要删除使用数据表总和为零的所有行(在本例中为行C)。 我修改了这个代码,完全可以在我的数据表
上完成>dt[apply(dt, 1, function(x) min(x) != max(x)), ]
这段代码可以得到我想要的但是没有用。
>dt[apply(dt, 1, function(x) sum(x) = 0, ]
我的第二个问题是我想在不考虑零的情况下计算所有行的平均值。
有谁知道这两个问题的正确代码?
谢谢:)
答案 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