用r计算df列中的出现次数

时间:2019-04-16 10:53:08

标签: r dataframe count

我需要计算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

1 个答案:

答案 0 :(得分:3)

您可以使用stacktable

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

使用tidyrdplyr功能

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