plyr суммирует длину строки ошибки подсчета

предположим, что у меня есть следующие данные:

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 и 4 для каждой переменной после фильтрации. В моей попытке добиться этого ниже я получаю сообщение об ошибке: длина (строки) == 1 не является ИСТИННОЙ.

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

Я получаю сообщение об ошибке, потому что некоторые из моих столбцов не содержат всех значений 1-4. Есть ли способ указать, что он должен искать, и дать 0 значений, если он не найден? Я не уверен, как это сделать, если это возможно, или если есть другая работа.

Любая помощь ОЧЕНЬ приветствуется!!!


person Ellie    schedule 16.05.2018    source источник
comment
Это не часть data %>% dplyr::filter(filt ==1), которая вызывает ошибку, поэтому вы можете избавиться от нее и упростить вопрос, сделав его более точным (меньшие выборочные данные, один вызов функции и т. д.). Это повысит ваши шансы получить ответ.   -  person byouness    schedule 16.05.2018


Ответы (1)


Это было немного странно, я не использовал классическую 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
person zack    schedule 16.05.2018
comment
Спасибо!! Я никогда раньше не использовал муррр, можете ли вы просто объяснить, что делает функция (a_column)? @зак - person Ellie; 16.05.2018
comment
Не волнуйтесь. Как правило, это пакет, который вписывает функциональное программирование в аккуратный стиль кодирования в R. Часть function(a_column)... моего кода применяет определенную функцию к каждому столбцу в data.frame. Затем я определяю анонимную функцию для сопоставления интересующих вас значений (1:4) и проверяю, как часто они встречаются в каждом столбце. Я также отредактировал ответ фигурными скобками, чтобы сделать его более понятным, надеюсь, это поможет. - person zack; 17.05.2018