У меня длинный канал различных функций фильтрации и выбора, и в той же операции канала я хотел бы переименовать столбец на основе значения в первой строке другого столбца. Я должен сделать это для множества различных фреймов данных, поэтому было бы неплохо использовать конвейер, не зависящий от имени фрейма данных.
Это небольшой пример:
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]))))