tidyr "pivot_longer": повторение столбца дает ошибку "объект не найден" - PullRequest
2 голосов
/ 16 июня 2020

Я начинаю с фрейма данных с 5 столбцами: один столбец обработки, T_type и четыре столбца переменных результата, A, B, C и D. Я пытаюсь сложить переменные результата, поэтому я в итоге получается один столбец для значений, другой с именами четырех конечных переменных, а затем столбец с именами обработок, повторяющимися вдоль ряда столбцов. Это то, что показано на странице справки R для pivot_longer в примере Relig_income, и в значительной степени то, что Джейсон пытался здесь сделать: объект dplyr `pivot_longer ()` не найден, но он прямо здесь?

Я получаю ту же ошибку, что и Джейсон с pivot_longer, и понятия не имею, почему. Вот что происходит.

dd <- as.data.frame(matrix(rpois(32, 4), nrow = 8))
names(dd) <- LETTERS[1:4]
dd <- data.frame(dd, T_type = rep(c("M", "P"), each = 4))
dd
  A B C  D T_type
1 3 5 5  4      M
2 7 5 2  2      M
3 2 3 3 10      M
4 3 3 2  3      M
5 8 3 4  3      P
6 4 4 5  1      P
7 6 4 2  6      P
8 9 4 3  6      P

Итак, теперь я пытаюсь pivot_longer.

dd %>% pivot_longer(-T_type, cols = A:D, names_to = "response", values_to = "y_obs")
Error in build_longer_spec(data, !!cols, names_to = names_to, values_to = values_to,  : 
  object 'T_type' not found

Переставить столбцы в dd так, чтобы T_type находился перед столбцами от A до D. помогите.

Я был бы признателен, если бы кто-нибудь рассказал мне, что здесь происходит и как я могу заставить pivot_longer выполнить эту работу.

Ответы [ 2 ]

1 голос
/ 16 июня 2020

Вам необходимо исключить T_type из pivot_longer, потому что первый аргумент этой функции - это набор данных (который может быть опущен, если вы находитесь в конвейере %>%)

dd %>% pivot_longer(cols = A:D, names_to = "response", values_to = "y_obs")

Выход

# A tibble: 32 x 3
#    T_type response y_obs
#    <chr>  <chr>    <int>
#  1 M      A            7
#  2 M      B            4
#  3 M      C            4
#  4 M      D            3
#  5 M      A            8
#  6 M      B            3
#  7 M      C            5
#  8 M      D            3
#  9 M      A            4
# 10 M      B            6
# ... with 22 more rows
0 голосов
/ 16 июня 2020

Попробуйте следующее:

dd %>% 
  gather("response", "y_obs", -T_type)

Или:

dd %>% pivot_longer(names_to = "response", values_to = "y_obs", -T_type)

Или:

dd %>% pivot_longer(names_to = "response", values_to = "y_obs", A:D)

Вы указываете диапазон столбцов: от A до D, поэтому вы не найдет T_type

...