我想寫一個函數使用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),例如:
但是,這會導致輸出中的列名稱爲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")
如果這是不可能的,替代方法的建議也十分讚賞。
由於
瑪
你能演示你想要的輸出嗎?你熟悉'plyr'包嗎?根據你想要做什麼,我希望你會在那裏找到答案 – alexwhan
請參閱G. Grothendieck對於我想要的那種輸出的回答,但是我理想地希望能夠以不同的方式指定列的名稱變量名稱 - 因此在他的示例列「g」和「b」中,我將這些名稱定義爲函數中的參數,用於list(FOO = data [[g]])的效果。儘管會檢查'plyr'包。 – Malcoholic