Мы подставляем альтернативные столбцы, используем каждый набор в качестве входных данных для mapply
, получаем table
и prop.table
на основе условия, упомянутого в посте ОП
out <- round(mapply(function(x, y) prop.table(table(x[y > 0] != 0)) * 100,
df[c(FALSE, TRUE)], df[c(TRUE, FALSE)]), 2)
colnames(out) <- paste0(colnames(out), ".perc")
out
# b.perc d.perc f.perc
#FALSE 25 80 33.33
#TRUE 75 20 66.67
Если нас просто интересует ИСТИННЫЙ процент, то мы можем сделать это и с colMeans
colMeans((df[c(FALSE, TRUE)] * NA^!(df[c(TRUE, FALSE)] > 0)) != 0, na.rm = TRUE)
# b d f
#0.7500000 0.2000000 0.6666667
данные
df <- structure(list(a = c(1L, 0L, 1L, 5L, 2L), b = c(2L, 0L, 5L, 1L,
0L), c = c(3L, 1L, 2L, 2L, 1L), d = c(0L, 0L, 1L, 0L, 0L), e = c(4L,
2L, 0L, 1L, 0L), f = c(5L, 0L, 0L, 1L, 0L)), class = "data.frame",
row.names = c("1",
"2", "3", "4", "5"))