Вы можете использовать stack
и table
table(stack(dat))
# ind
#values a b c d e f g h
# 1 2 1 2 0 1 0 1 1
# 2 2 1 0 0 1 1 0 0
# 3 3 2 1 1 0 0 1 2
Используя tidyr
и dplyr
функции, которые вы можете сделать
library(tidyr); library(dplyr)
gather(dat, na.rm = TRUE) %>%
count(value, key) %>%
spread(key, n, fill = 0)
Данные
dat <- structure(list(a = c(2L, 2L, NA, NA, 3L, NA, 1L, NA, 3L, NA,
1L, NA, NA, 3L), b = c(NA, NA, NA, 2L, 3L, NA, NA, NA, NA, NA,
3L, NA, NA, 1L), c = c(1L, NA, NA, NA, NA, NA, NA, NA, 1L, 3L,
NA, NA, NA, NA), d = c(NA, NA, NA, NA, 3L, NA, NA, NA, NA, NA,
NA, NA, NA, NA), e = c(NA, NA, NA, NA, NA, NA, NA, NA, 2L, NA,
1L, NA, NA, NA), f = c(NA, NA, NA, NA, NA, NA, NA, NA, 2L, NA,
NA, NA, NA, NA), g = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, 1L,
3L, NA, NA, NA), h = c(NA, NA, NA, NA, NA, NA, 3L, NA, 1L, NA,
NA, NA, NA, 3L)), .Names = c("a", "b", "c", "d", "e", "f", "g",
"h"), class = "data.frame", row.names = c("1001", "1075", "1076",
"1077", "1078", "1079", "1080", "1081", "1082", "1083", "1084",
"1085", "1086", "1087"))