如何根据 dplyr 管道中另一列的第一行的值重命名列
How to rename column based on value of the first row of another column in dplyr pipe
我有一长串不同的过滤和选择函数,在同一个管道操作中,我想根据另一列第一行的值重命名一列。我必须为许多不同的数据框执行此操作,因此与数据框名称无关的管道会很好。
这是一个小例子:
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]))))
您需要取消引用。这有效:
original %>%
rename(!!paste0("indicator", .$year[1]) := "value")
为了将来参考,我建议您查看 "programming with dplyr" 插图 (https://cran.r-project.org/web/packages/dplyr/vignettes/programming.html).
我有一长串不同的过滤和选择函数,在同一个管道操作中,我想根据另一列第一行的值重命名一列。我必须为许多不同的数据框执行此操作,因此与数据框名称无关的管道会很好。
这是一个小例子:
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]))))
您需要取消引用。这有效:
original %>%
rename(!!paste0("indicator", .$year[1]) := "value")
为了将来参考,我建议您查看 "programming with dplyr" 插图 (https://cran.r-project.org/web/packages/dplyr/vignettes/programming.html).