Как переименовать столбец на основе значения первой строки другого столбца в трубе dplyr - PullRequest
3 голосов
/ 28 октября 2019

У меня длинный канал различных функций фильтрации и выбора, и в той же операции канала я хотел бы переименовать столбец на основе значения в первой строке другого столбца. Я должен сделать это для множества различных фреймов данных, поэтому было бы неплохо использовать конвейер, не зависящий от имени фрейма данных.

Это небольшой пример:

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 голосов
/ 28 октября 2019

Вы должны сделать некоторые цитаты. Это работает:

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

Для дальнейшего использования я бы предложил вам проверить "программирование с помощью dplyr" виньетка (https://cran.r -project.org / web /пакеты / dplyr / виньетки / programming.html ).

...