【问题标题】:pivot_longer with tidyselect where, where but doesnt predicates?pivot_longer 与 tidyselect where,where 但没有谓词?
【发布时间】:2020-05-27 19:03:18
【问题描述】:

我正在尝试将tidyselect 函数wherepivot_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: This tidyselect interface doesn't support predicates yet)

d %>% 
  select(where(is.character))

【问题讨论】:

    标签: r dplyr pivot predicate tidyselect


    【解决方案1】:

    使用tidyr_1.1.0dplyr 的开发版本可以正常工作

    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
    

    【讨论】:

    • 您在 pivot_longer 中仍有everything()。请注意,我的select(where(is.character)) 与您的select_if 做同样的事情。你是说我需要两个步骤,不能在 pivot_longer 中进行选择。此外,您不要保留 id 字段。
    • @HarlanNelson 从您的帖子中不清楚,因为您展示的两种方法对我来说都很好
    • @HarlanNelson 您的 tidyr 软件包版本是什么。 where 对我来说效果很好
    • tidyr 1.0.2 对我不起作用:d %>% pivot_longer(where(is.character),values_to = 'result', names_to = 'group')
    • 我需要 tidyr_1.1.0。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 2020-08-24
    • 2022-11-16
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多