【发布时间】:2013-05-17 03:32:20
【问题描述】:
我正在尝试使用 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,而不是所需的参数值。
其次,在此基础上 - 如果我想指定多个变量进行排序 - 带有名称。我尝试使用...,但这似乎不可能,因为附加参数显然需要采用以下形式:
list(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")
如果无法做到这一点,我们也非常感谢您提供替代方法的建议。
谢谢
恶意
【问题讨论】:
-
你能证明你想要什么输出吗?你熟悉
plyr包吗?根据您想要做的事情,我希望您会在那里找到答案 -
请参阅 G. Grothendieck 对我想要的输出类型的回答,但理想情况下,我希望能够指定与变量名称不同的列名称 - 所以在他的示例列 'g ' 和 'b' 将是我在函数中定义为参数的名称,具有
list(FOO = data[[g]])的效果。不过会查看plyr包。