【发布时间】:2015-10-30 08:21:39
【问题描述】:
我有一个这样的数据框:
ID Value1 Value2 Value3
1 20 25 0
2 2 0 0
3 15 32 16
4 0 0 0
我想做的是仅基于非零值计算每个人 (ID) 的方差,并在不可能的情况下返回 NA。
例如,在本例中,ID 1 的方差为 var(20, 25), 对于 ID 2,它将返回 NA,因为您无法仅计算一个条目的方差,对于 ID 3,var 将是 var(15, 32, 16),对于 ID 4,它将再次返回 NULL,因为它没有数字全部用于计算方差。
我该怎么做呢?我目前有以下(不完整的)代码,但这可能不是最好的方法:
len=nrow(d)
variances = numeric(len)
for (i in 1:len){
#get all nonzero values in ith row of data into a vector nonzerodat here
currentvar = var(nonzerodat)
Variances[i]=currentvar
}
请注意,这是一个玩具示例,但我实际使用的数据集有 40 多个不同的值列来计算方差,因此可以轻松扩展的东西会很棒。
【问题讨论】:
-
apply(df[-1], 1, function(x) var(x[x != 0])) -
您可能还想考虑
matrixStats包中的rowVars。
标签: r loops conditional