如何根据另一列的值重命名嵌套tibble中的列

时间:2019-08-28 06:38:02

标签: r dplyr purrr

有时候,我会根据另一列的值来更改嵌套tibble的列名称。
我可以在map()中使用它来准备函数。

library(tidyverse)

# sample data
d <- tibble(col1 = 1:8, col2 = 11:18, group = letters[rep(1:2, each = 4)]) %>%
  nest(-group)

f <- function(data, group) rename(data, !!paste0(group, "_col1") := col1)

# Run
desired_output <- d %>%
  mutate(data = map2(data, group, f))

names(desired_output$data[[1]])  # "a_col1" "col2"   # work

我想通过匿名函数来执行此操作,但是它不起作用。有没有办法像mutate(map(rename(!!a := b)))那样使用匿名函数? 谢谢您的任何建议。

d %>%
  mutate(data2 = map2(data, group,
                      function(data, group) {
                        data %>%
                          rename(!!paste0(group, "_col1") := col1)
                      }))

# Error in paste0(group, "_col1") : object 'group' not found

1 个答案:

答案 0 :(得分:4)

我不确定您对匿名函数的确切含义,但这是一种无需将函数f分配给变量的方法:

d %>% 
  mutate(data = map2(data, group, ~rename_at(.x, 1, function(z) paste(.y, z, sep = "_"))))