我有很长的管道,具有不同的过滤和选择功能,并且在相同的管道操作中,我想根据另一列的第一行中的值重命名一列。我必须对许多不同的数据帧执行此操作,因此与数据帧名称无关的管道会很好。
这是一个小例子:
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年,那么value的列名称将更改为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]))))
答案 0 :(得分:4)
您需要取消报价。这有效:
original %>%
rename(!!paste0("indicator", .$year[1]) := "value")
为将来参考,我建议您查看“用dplyr编程” 小插图(https://cran.r-project.org/web/packages/dplyr/vignettes/programming.html)。