plyr汇总计数错误行长度

时间:2018-05-16 19:53:47

标签: r count plyr summarize

假设我有以下数据:

A <- c(4,4,4,4,4)
B <- c(1,2,3,4,4)
C <- c(1,2,4,4,4)
D <- c(3,2,4,1,4)

filt <- c(1,1,10,8,10)


data <- as.data.frame(rbind(A,B,C,D,filt))
data <- t(data)
data <- as.data.frame(data)

> data
    A B C d filt
 V1 4 1 1 3    1
 V2 4 2 2 2    1
 V3 4 3 4 4   10
 V4 4 4 4 1    8
 V5 4 4 4 4   10

我想了解1,2,3和&amp;的发生率。过滤后,每个变量4个。在我尝试实现此目的时,我得到错误:长度(行)== 1不为TRUE。

  data %>%
     dplyr::filter(filt ==1) %>%
      plyr::summarize(A_count = count(A),
                      B_count = count(B))

我收到错误 - 因为我的一些列不包含所有值1-4。有没有办法指定它应该寻找什么&amp;如果没有找到0值?如果可能的话,我不确定如何做到这一点,或者如果有不同的解决方法。

任何帮助都非常感谢!!!

1 个答案:

答案 0 :(得分:2)

这有点奇怪,我没有使用古典plyr,但我认为这大致是你正在寻找的。我删除了过滤列filt,因为没有计算:

library(dplyr)

data %>% 
  filter(filt == 1) %>% 
  select(-filt) %>%
  purrr::map_df(function(a_column){
    purrr::map_int(1:4, function(num) sum(a_column == num))
    })

# A tibble: 4 x 4
      A     B     C     D
  <int> <int> <int> <int>
1     0     1     1     0
2     0     1     1     1
3     0     0     0     1
4     2     0     0     0