Ошибка dplyr: длина (строки) == 1 не истинно в R - PullRequest
0 голосов
/ 16 мая 2018

В качестве предыстории, данные, с которыми я работаю, относятся к ранжированию 3 лучших переменных. Мне нужно иметь возможность подсчитать 1 с, 2 с, 3 с и NA (# чел, которые не включили его в топ 3).

У меня есть фрейм данных LikelyRenew_ReasonB, и я использовал dplyr для фильтрации по определенному году и статусу, который работает правильно / без ошибок.

LikelyRenew_ReasonB <-    
  LikelyRenew_Reason %>%
      filter(year ==1, status ==2)

> LikelyRenew_ReasonB
  cost products commun reimburse policy discount status year
1   NA       NA     NA        NA     NA       NA      2    1
2   NA       NA      1         2     NA       NA      2    1
3    2       NA      3        NA      1       NA      2    1
4   NA       NA     NA         1     NA       NA      2    1
5   NA       NA      3         1      2       NA      2    1
6   NA       NA      2         1      3       NA      2    1
7   NA       NA      1        NA     NA       NA      2    1
8   NA        2      3         1     NA       NA      2    1
9    3       NA      1        NA      2       NA      2    1

Однако, когда я пытаюсь получить итоговые значения, выдается сообщение об ошибке: Ошибка: длина (строки) == 1 не соответствует значению «R.» до года == 3, статус == 1, то работает нормально. Есть идеи о том, что мне здесь не хватает?

    LikelyRenew_ReasonB  %>%
          summarize(
            costC = count(cost), 
            productsC = count(products),
            communC = count(commun),
            reimburseC = count(reimburse),
            policyC = count(policy),
            discountC = count(discount))

Вот как выглядит LikelyRenew_ReasonB (* обратите внимание, что это заголовок dput, следующий, когда у меня год == 3, состояние == 1 в качестве фильтра)

> dput(head(LikelyRenew_ReasonB))
structure(list(costC = structure(list(x = c(1, 2, 3, NA), freq = c(10L, 
11L, 17L, 149L)), .Names = c("x", "freq"), row.names = c(NA, 
4L), class = "data.frame"), productsC = structure(list(x = c(1, 
2, 3, NA), freq = c(31L, 40L, 30L, 86L)), .Names = c("x", "freq"
), row.names = c(NA, 4L), class = "data.frame"), communC = structure(list(
x = c(1, 2, 3, NA), freq = c(51L, 50L, 34L, 52L)), .Names = c("x", 
"freq"), row.names = c(NA, 4L), class = "data.frame"), reimburseC = 
structure(list(
x = c(1, 2, 3, NA), freq = c(42L, 26L, 25L, 94L)), .Names = c("x", 
"freq"), row.names = c(NA, 4L), class = "data.frame"), policyC = 
structure(list(
x = c(1, 2, 3, NA), freq = c(31L, 25L, 28L, 103L)), .Names = c("x", 
"freq"), row.names = c(NA, 4L), class = "data.frame"), discountC = 
structure(list(
x = c(1, 2, 3, NA), freq = c(2L, 2L, 3L, 180L)), .Names = c("x", 
 "freq"), row.names = c(NA, 4L), class = "data.frame")), .Names = c("costC", 
"productsC", "communC", "reimburseC", "policyC", "discountC"), row.names = 
c(NA, 
 4L), class = "data.frame")

Вот пример того, как он «работает». Опять же, проблема в том, что по какой-то причине я получаю ошибку, когда меняю статус / год на другой интересующий сегмент.

> LikelyRenew_ReasonB <-    
+   LikelyRenew_Reason %>%
+   dplyr::filter(year ==3, status ==1) %>%
+   plyr::summarize(
+                 costC = count(cost), 
+                 productsC = count(products),
+                 communC = count(commun),
+                 reimburseC = count(reimburse),
+                 policyC = count(policy),
+                 discountC = count(discount))

Вот пример правильного вывода

    > LikelyRenew_ReasonB
    costC.x costC.freq productsC.x productsC.freq
1       1         10           1             31
2       2         11           2             40
3       3         17           3             30
4      NA        149          NA             86

1 Ответ

0 голосов
/ 16 мая 2018

Count () - это оболочка для summaze () https://dplyr.tidyverse.org/reference/tally.html. Возможно, вы хотите использовать sum () вместо count ()?

LikelyRenew_ReasonB %>%
    summarize(
        costC = sum(cost, na.rm = TRUE),
        productsC = sum(products, na.rm = TRUE),
        communC = sum(commun, na.rm = TRUE),
        reimburseC = sum(reimburse, na.rm = TRUE),
        policyC = sum(policy, na.rm = TRUE),
        discountC = sum(discount, na.rm = TRUE))
...