我有一个只有TRUE/FALSE值的数据帧
tf <- as.data.frame(matrix(c(rep(TRUE,5),rep(FALSE,5)),10,10))
我想计算每列TRUE值的百分比。因此,我编写了以下应用函数,但它只返回一个空向量:
overlay <- apply(tf,2,function(x) sum(x == TRUE)/nrow(x))
我做错了什么?
这应该是快速
colMeans(tf)
# V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
#0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5
匿名函数function(x) sum(x == TRUE)/nrow(x)
中的x
是对应于某一行的向量。因此,您需要的不是nrow
,而是length
:
apply(tf, 2, function(x) sum(x == TRUE) / length(x))
另一方面,你可以通过以矢量化的方式实现同样的效果
colMeans(tf)
# V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
# 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5
我不知道你为什么使用nrow
,但检查一下:
overlay <- apply(tf,2,function(x) sum(x == TRUE)/length(x) * 100)