применить функцию TRUE / FALSE Ratios - PullRequest
0 голосов
/ 04 ноября 2018

У меня есть датафрейм только со значениями ИСТИНА / ЛОЖЬ

 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))

Что я делаю не так?

Ответы [ 3 ]

0 голосов
/ 04 ноября 2018

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 
0 голосов
/ 04 ноября 2018

Это должно быть быстро

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
0 голосов
/ 04 ноября 2018

Я не знаю, почему вы использовали nrow, но проверьте это:

overlay <- apply(tf,2,function(x) sum(x == TRUE)/length(x) * 100)
...