r-应用函数TRUE/FALSE比率



我有一个只有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)

最新更新