Проблема при написании функции в R, которая использует "сборку" тидира для преобразования похожих фреймов данных в длинный формат - PullRequest
2 голосов
/ 28 апреля 2019

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

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

Вот пример кода:

df <- data.frame(Country = c("Afghanistan", "Angola", "Albania"),
                 Indicator = "emissions",
                 '1960' = rnorm(3, mean = 0.5, sd =1),
                 '1961' = rnorm(3, mean = 0.5, sd =1),
                 '1962' = rnorm(3, mean = 0.5, sd =1))

colnames(df) <- c("Country", "Indicator", "1960", "1961", "1962")

Да, я намеренно меняю названия последних трех столбцов на годы, но на тип данных.Данные, которые я использую (из банка данных Всемирного банка), приходят вот так.

Вот функция:

convert_to_longform <- function(df_name1, value_name1, year1, year2) {
  gather(df_name1, key = Year, value = value_name1, c(year1:year2))

}

df_lf <- convert_to_longform(df, emissions, "1960", "1962")

Так что эта функция работает, но, как вы видите, имя столбца для столбца значения становится «value_name1», когда я хочу, чтобы имя столбца было «выбросы».Есть ли способ установить имя столбца значения с помощью команды "собирать" внутри отдельной функции?

Мой ожидаемый результат - это длинный фрейм данных, в котором столбцом значения является «эмиссия» или какая-то другая символьная строка, которую я определяю, а не имя-значения1.

1 Ответ

0 голосов
/ 28 апреля 2019

вы можете указать имя столбца значения, если вы кавычки аргумента с !!:

(см. Документы по Квазиквотация выражения )

convert_to_longform <- function(df_name1, value_name1, year1, year2) {
 gather(df_name1, key = Year, value = !!value_name1, c(year1:year2))
}

convert_to_longform(df, "emissions", "1960", "1962")



#        Country Indicator Year   emissions
#  1 Afghanistan emissions 1960  0.68329845
#  2      Angola emissions 1960  0.13857468
# ...
...