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
Другие вопросы по тегам