如何在dplyr管道中,根据另一列第一行的值重命名列?

3

我有一个包含多个过滤和选择函数的长管道,在同一个管道操作中,我想根据另一列第一行的值来重命名列。我必须对许多不同的数据框执行此操作,因此最好使用对数据框名称不敏感的管道。

这是一个小例子:

original <- tibble(value = c(1,2,4,6,7), month = 1:5, year = 2018)
what_I_want <- tibble(indicator2018 = c(1,2,4,6,7), month = 1:5, year = 2018)

因此,如果列“year”的第一行是2015,那么值的列名将更改为“indicator2015”。

这个不起作用:

original %>%
  rename(paste0("indicator", .$year[1]) = "value")

original %>%
  rename_at(vars(starts_with("value")), list( ~ str_replace(., "value", paste0("indicator", .["year"][1]))))

这个方法可以行得通,但要打断管道,(更重要的是)需要在管道中指定数据框的名称,因此在涉及许多不同的数据框时,需要手动更改代码才能适用。

original2 <- original %>%
  rename_at(vars(starts_with("value")), list( ~ str_replace(., "value", paste0("indicator", original$year[1]))))
1个回答

4

1
谢谢提供这个示例,我会仔细阅读。但更重要的是,非常感谢您的回答!! - L Smeets

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接