我需要计算df中每列3个值的出现。 值为1-3,并且列中也有NA。 df看起来像:
a b c d e f g h
1001 2 NA 1 NA NA NA NA NA
1075 2 NA NA NA NA NA NA NA
1076 NA NA NA NA NA NA NA NA
1077 NA 2 NA NA NA NA NA NA
1078 3 3 NA 3 NA NA NA NA
1079 NA NA NA NA NA NA NA NA
1080 1 NA NA NA NA NA NA 3
1081 NA NA NA NA NA NA NA NA
1082 3 NA 1 NA 2 2 NA 1
1083 NA NA 3 NA NA NA 1 NA
1084 1 3 NA NA 1 NA 3 NA
1085 NA NA NA NA NA NA NA NA
1086 NA NA NA NA NA NA NA NA
1087 3 1 NA NA NA NA NA 3
出来的样子。
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 1
答案 0 :(得分:3)
您可以使用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"))