我正在尝试使用 aggregate() 编写一个函数,该函数将允许我轻松指定一个或多个要列出的变量及其名称。
数据:
FCST_VAR OBS_SID FCST_INIT_HOUR ME
WIND 00000 12 4.00000
WIND 11111 12 -0.74948
WIND 22222 12 -0.97792
WIND 00000 00 -2.15822
WIND 11111 00 0.94710
WIND 22222 00 -2.28489
我可以很容易地对单个变量进行分组:
aggregate.CNT <- function(input.data, aggregate.by) {
# Calculate mean ME by aggregating specified variable
output.data <- aggregate(input.data$ME,
list(Station_ID = input.data[[OBS_SID]]),
mean, na.rm=T)
}
但是,我对两件事感到困惑:首先,一种能够调用指定“group by”列(而不是 Group1)名称的函数的方法,例如:
aggregate.CNT <- function(input.data, aggregate.by, group.name) {
# Calculate mean ME by aggregating specified variable
output.data <- aggregate(input.data$ME,
list(group.name = input.data[[OBS_SID]]),
mean, na.rm=T)
}
但这会导致输出中的列名group.name
而不是参数的期望值。
其次,在此基础上——如果我想指定多个变量进行排序——带有名称。我尝试使用...
,但这似乎不可能,因为附加参数显然需要采用以下形式:
列表(arg1 = input.data[[arg2]],arg3 = input.data[[arg4]])
而且我认为没有办法将额外的参数放入arg3 = input.data[[arg4]]
格式中。所以我想知道是否有一种方法可以使用参数将整个字符串插入到函数中,例如:
aggregate.CNT <- function(input.data, aggregate.by.list) {
# Calculate mean ME by aggregating specified variable
output.data <- aggregate(input.data$ME,
list(aggregate.by.list),
mean, na.rm=T)
aggregate.CNT(data, "Station_ID = data$OBS_SID, Init_Hour = data$FCST_INIT_HOUR")
如果这是不可能的,我们也非常感谢您对替代方法的建议。
谢谢
马尔