R dplyr: rowwise + mutate (+glue) - 如何获取/引用行内容?

Posted

技术标签:

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

输入数据的简单例子:

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)
  )

【问题讨论】:


【参考方案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) 似乎存在问题的警告

【讨论】:

以上是关于R dplyr: rowwise + mutate (+glue) - 如何获取/引用行内容?的主要内容,如果未能解决你的问题,请参考以下文章

R语言dplyr包mutate_if函数修改所有满足条件的数据列的内容实战

R语言dplyr包mutate_at函数通过名称修改指定数据列的内容(使用统一的函数)实战

在 R 中:将列名作为参数传递,并在 dplyr::mutate() 和 lazyeval::interp() 的函数中使用它

R语言dplyr包mutate_all函数一次性处理所有的数据列的内容(使用统一的函数)实战

R dplyr,将 mutate 与 na.omit 一起使用会导致错误大小不兼容 (%d)

如何在 R 中使用 dplyr mutate 函数来计算运行余额?