我有一个只有TRUE / FALSE值的数据框
tf <- as.data.frame(matrix(c(rep(TRUE,5),rep(FALSE,5)),10,10))
,我想计算每列TRUE值的百分比。因此,我编写了以下apply函数,但是该函数仅返回一个空向量:
overlay <- apply(tf,2,function(x) sum(x == TRUE)/nrow(x))
我在做什么错?
答案 0 :(得分:4)
这应该很快
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
答案 1 :(得分:2)
我不知道您为什么使用nrow
,但请检查以下内容:
overlay <- apply(tf,2,function(x) sum(x == TRUE)/length(x) * 100)
答案 2 :(得分:2)
匿名函数x
中的function(x) sum(x == TRUE)/nrow(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