dplyr Arrange глагол не будет работать на класс персонажа, работает только на факторы - PullRequest
0 голосов
/ 31 мая 2018
library(tidyverse)
df <- structure(list(PN = c("41681", "16588", "34881", 
"36917", "33116", "68447"), `2017-10` = c(0L, 
0L, 0L, 0L, 0L, 0L), `2017-11` = c(0L, 1L, 0L, 0L, 0L, 0L), `2017-12` = c(0L, 
0L, 0L, 0L, 1L, 0L), `2018-01` = c(0L, 0L, 1L, 1L, 0L, 0L), `2018-02` = c(1L, 
0L, 0L, 0L, 0L, 0L), `2018-03` = c(0L, 0L, 0L, 0L, 0L, 0L), `2018-04` = c(0L, 
0L, 0L, 0L, 0L, 1L), Status = c("OK", "NOK", "OK", "NOK", "OK", 
"OK")), .Names = c("PN", "2017-10", "2017-11", "2017-12", 
"2018-01", "2018-02", "2018-03", "2018-04", "Status"), row.names = c(NA, 
-6L), class = c("tbl_df", "tbl", "data.frame"))

Столбец Status в приведенном выше фрейме данных df был создан с использованием следующей функции применения:

mutate(
  Status = 
    ifelse(
      (apply(.[, 2:7], 1, sum) > 0) & 
        (.[, 8] > 0), 
      "NOK", 
      "OK"
      )
)

Если I %>% передает arrange(Status) непосредственно после кодакусок выше я получаю следующую ошибку.

Ошибка вrange_impl (.data, точки): Аргумент 1 имеет матрицу неподдерживаемого типа

Если я запускаю весь свой код без arrange(Status), код выполняется нормальнои превращается в воспроизводимый блок, который я настроил в начале этого поста - через dput(df)

Столбец Status имеет тип символа, но если я его перед факторизацией до запуска команды arrange(Status), ошибкапоказанное выше исчезает.

У меня никогда не было проблемы с глаголом arrange() в классах символов.Почему я вынужден учитывать свой столбец Status, чтобы ошибка исчезла?Это как-то связано с моим использованием команды apply?Это единственное новое, что я сделал в своем «программировании» на этот раз.

1 Ответ

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

Ранее в своем анализе мне пришлось заменить NA на 0, и вот что я сделал:

mutate(n = parse_integer(str_replace_na(n, replacement = 0)))

Очевидно, я закончил тем, что создал столбец символьных матриц, может быть, с помощью этой команды применения, может быть, с помощью команды stringR, приведенной выше, не уверен, какая:

mutate(
  Status = 
    ifelse(
      (apply(.[, 2:7], 1, sum) > 0) & 
        (.[, 8] > 0), 
      "NOK", 
      "OK"
      )
)

Как указали @joran и @akrun, следующая проблема решена:

mutate(Status = as.vector(Status))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...