pivot_longer с tidyselect where, where, но не предикаты?
Я пытаюсь использовать tidyselect
функция where
с pivot_longer
и я получаю сообщение об ошибке tidyselect
пакет не поддерживает предикаты. Это показалось несколько неразумным, поэтому, скорее всего, у меня есть синтаксическая ошибка. (Я понимаю, что SO не предназначен для отладки кода.) Думаю, мне было бы легче понять, если бы кто-нибудь мог показать мне, как выполнить эту задачу.
d <- dplyr::tribble(
~cups, ~glasses,
"YES", "NO",
"NO" , "YES",
"YES", "NO",
"YES", "NO",
"NO" , "YES",
"YES", "NO",
"NO" , "YES",
"NO" , "YES",
"YES", "NO",
"NO" , "YES",
"YES", "NO",
"NO" , "YES",
"abc", "def"
) %>%
mutate(id = row_number())
Это дает желаемый результат.
the_columns_I_want <- c('cups','glasses')
d %>%
pivot_longer(all_of(the_columns_I_want),values_to = 'result', names_to = 'group')
Но я хочу выбрать определенные типы полей.
d %>%
pivot_longer(where(is.character),values_to = 'result', names_to = 'group')
Покажите, что это работает для dplyr
, Поэтому я не делаю этой ошибки: ( Tidyverse: этот интерфейс tidyselect еще не поддерживает предикаты)
d %>%
select(where(is.character))
1 ответ
С tidyr_1.1.0
и разрабатываемая версия dplyr
он работает нормально
library(tidyr)
d %>%
pivot_longer(where(is.character),values_to = 'result', names_to = 'group')
# A tibble: 26 x 3
# id group result
# <int> <chr> <chr>
# 1 1 cups YES
# 2 1 glasses NO
# 3 2 cups NO
# 4 2 glasses YES
# 5 3 cups YES
# 6 3 glasses NO
# 7 4 cups YES
# 8 4 glasses NO
# 9 5 cups NO
#10 5 glasses YES
# … with 16 more rows