我正在尝试编写一个函数,该函数使用tidyr的聚集,并且可以用于将多个相似的数据帧转换为长格式。我已经编写了一个可以成功转换为长格式的基本函数,但是我也希望该函数命名为“值”列,这是我遇到的困难。
我已经在互联网上搜索了一段时间,但由于收集本身是一项功能,因此我每次使用“ write function ...”和“ gather”的某种变体进行搜索时,只会导致我转到显示如何使用的页面该功能聚集在提迪尔。我知道如何使用收集。我想做的是在单独的函数中使用“聚集”。
这是一些示例代码:
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”。有没有一种方法可以在单独的函数中使用collect来设置value列的名称?
我的预期结果是一个长格式数据框,其中value列是“ emissions”或我指定的其他一些字符串,而不是value_name1。
答案 0 :(得分:0)
如果用!!
取消引号,则可以指定值列的名称:
(请参阅Quasiquotation of an expression上的文档)
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
# ...