我确定有一个简单的解决方案,但我似乎无法输出正确的值。我有一个数据框,我想根据某个值以上的值计算平均值,在本例中为150.
df1 <- as.data.frame(matrix(sample(0:1000, 36*10, replace=TRUE), ncol=1))
df2 <- as.data.frame(matrix(sample(0:500, 36*10, replace=TRUE), ncol=1))
df3 <- as.data.frame(matrix(sample(0:200, 36*10, replace=TRUE), ncol=1))
Example <- cbind(df1,df2,df3)
我所做的类似的事情让我觉得申请可能是最有效的方式(我试图按照下面的链接中的步骤)。 http://rforpublichealth.blogspot.co.uk/2012/09/the-infamous-apply-function.html。但是,以下代码的输出是错误的,尽管我试图将平均值高于150,但输出仍然低于1.
test<- apply(Example,2,function(x) {mean(x > 150)})
任何帮助都将受到高度赞赏谢谢!
答案 0 :(得分:1)
你很接近,但需要mean(x[x > 150])
而不是mean(x > 150)
:
test<- apply(Example,2,function(x) {mean(x[x > 150])})
这是有效的,因为x[x > 150]
说“取x的所有值,其中x大于150”。
答案 1 :(得分:0)
所有值的平均值。
mean(as.matrix(Example)[as.matrix(Example) > 150])
[1] 426.0402
按栏目
sapply(Example, function(x) mean(x[x > 150]))
V1 V1 V1
575.6926 332.9713 175.6809
答案 2 :(得分:0)
更快的选择是在按列计算平均值之前使用matrix subsetting
选择正确的值:
ids <- which(Example>150,arr.ind=T) ## first all right values are selected
sapply(seq_len(ncol(Example)), ## compute mean for each column
function(x)mean(Example[ids[ids[,2]==x,]]))