pivot_longer с tidyselect where, where, но не предикаты? - PullRequest
1 голос
/ 27 мая 2020

Я пытаюсь использовать функцию tidyselect where с pivot_longer и получаю сообщение об ошибке, что пакет tidyselect не поддерживает предикаты. Это казалось несколько неразумным, так что, скорее всего, у меня синтаксическая ошибка. (Я понимаю, что SO не предназначен для отладки кода.) Я думаю, что это помогло бы мне лучше понять, если бы кто-нибудь мог показать мне, как выполнить sh эту задачу.

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 Ответ

0 голосов
/ 27 мая 2020

С 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
...