【问题标题】:R dplyr: rowwise + mutate (+glue) - how to get/refer row content?R dplyr: rowwise + mutate (+glue) - 如何获取/引用行内容?
【发布时间】:2019-02-23 11:15:44
【问题描述】:

输入数据的简单例子:

dataset <- data.frame("part1" = c("a", "b", "c"),
                       "part2" = c("x", "y", "z"),
                       "caption" = c("{part1} {part2}",
                                     "{part2} {part1}",
                                     "{part2} {part1} {part2}"),
                       stringsAsFactors = F)

预期结果:

# A tibble: 3 x 3
  part1 part2 caption
  <chr> <chr> <chr>  
1 a     x     a x    
2 b     y     y b    
3 c     z     z c z  

下面的代码不起作用,因为.指的是整个dataset,而不是整行内容的数据:

dataset %>%
  rowwise() %>%
  mutate("caption" =
           glue::glue_data(., caption)
         )

问题:如何将行(所有)内容传递给glue

有效的代码(明确声明的行“内容”)不是我一直在寻找的,因为在我的数据集中caption“模式”中使用了更多列,因此我想避免手动声明,传递整行内容即可。

dataset %>%
  rowwise() %>%
  mutate("caption" =
           glue::glue_data(
             list("part1" =  part1,
                  "part2" = part2)
             , caption)
  )

【问题讨论】:

    标签: r dplyr rowwise r-glue


    【解决方案1】:

    它的工作原理很简单:

    dataset %>% rowwise %>% mutate(r=as.character(glue(caption)))
    #Source: local data frame [3 x 4]
    #Groups: <by row>
    
    ## A tibble: 3 x 4
    #  part1 part2 caption                 r    
    #  <chr> <chr> <chr>                   <chr>
    #1 a     x     {part1} {part2}         a x  
    #2 b     y     {part2} {part1}         y b  
    #3 c     z     {part2} {part1} {part2} z c z
    

    注意:我添加了as.characteronly 是为了避免出现rowwise(Vectorizing 'glue' elements may not preserve their attributes) 似乎存在问题的警告

    【讨论】:

      猜你喜欢
      • 2016-01-10
      • 1970-01-01
      • 1970-01-01
      • 2016-09-17
      • 1970-01-01
      • 2018-02-03
      • 2021-04-01
      • 1970-01-01
      • 2016-10-22
      相关资源
      最近更新 更多