我有一个包含多个过滤和选择函数的长管道,在同一个管道操作中,我想根据另一列第一行的值来重命名列。我必须对许多不同的数据框执行此操作,因此最好使用对数据框名称不敏感的管道。
这是一个小例子:
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]))))