0
我想在一個循環中執行不同的聚合被應用到我的數據的不同行子集,但它似乎棘手的實現(如果可能的話):我可以使用從數據框中獲取的參數進行聚合嗎?
t <- data.frame(agg=c(list("field1"=field1, "field2"=field2), ...),
fun=c(mean, ...))
f <- function(x) {
for (i in 1:nrow(t) {
y <- aggregate(x, by=t$agg[i], FUN=t$fun[i])
# do something with y
}
}
一個問題是,該場列表agg
嘗試構建數據幀時觸發錯誤(「object'field1'not found」),另一個問題是R不喜歡將函數值分配給fun
(「不能強制類」功能「」到data.frame「)。
附錄: 我的數據(只是爲了符合上述定義),一個具體的例子是:
> d <- data.frame(field1=round(rnorm(5, 10, 1)),field2=letters[round(rnorm(5, 10, 1))], field3=1:5)
> d
field1 field2 field3
1 11 j 1
2 11 i 2
3 10 j 3
4 12 i 4
5 11 j 5
> with(d, aggregate(d$field3,by=list(field1, field2),FUN=mean))
Group.1 Group.2 x
1 11 i 2
2 12 i 4
3 10 j 3
4 11 j 3
搞小動作在數據幀中的變量名,我還是得到這樣的:
> with(d,t <- data.frame(agg=c(list("field1"=field1, "field2"=field2)),fun=c(mean)))
Error in as.data.frame.default(x[[i]], optional = TRUE) :
cannot coerce class ""function"" to a data.frame
'by'參數應該有一個與'x'長度相同的向量。這個條件是否滿足?你能提供一個可重複的例子嗎? –
爲什麼你會用這個數據框來代替列表? – LAP
@Leo P:是_「你爲什麼要用這個數據框而不是列表?」_表示你有一個列表解決方案? –