【发布时间】:2015-09-15 13:41:36
【问题描述】:
我想写一个简单的函数来计算 Var1 的平均值:
data<-structure(list(time = structure(c(1358832600, 1358832600), class = c("POSIXct",
"POSIXt"), tzone = ""), Var1 = c(0.4, 0.2)), .Names = c("time",
"Var1"), row.names = c(NA, -2L), class = "data.frame")
data<- data.table(data)
time Var1
2013-01-22 09:30:00 0.4
2013-01-22 09:30:00 0.2
Aggregated.Data<- function(data, col) {
aggregated <- ddply(data, time, summarise, col= mean(eval(col)))
return(aggregated)
}
aggregated.data <- Aggregated.Data(data, quote(Var1))
Everything works, output:
time Col
2013-01-22 09:30:00 0.3
问题:
- 这是正确的方法吗?我的意思是使用报价和评估?
- 为什么输出中的第二列名称是 col,如何将其更改为 Var1?
编辑:使用 data.table
Aggregated.Data<- function(data, col) {
aggregated <- data(data, list(col=mean(eval(substitute(col)))), by=list(time=time))
return(aggregated)
}
【问题讨论】:
-
如果您使用
data.table,为什么不使用data.table方法? -
@akrun,我实际上正在使用
data.table方法,但我最终遇到了同样的问题。 -
也许
f1 <- function(dat, col){ DT <- dat[, mean(.SD[[1]]), time, .SDcols=col]; setnames(DT, 2, col); DT }或者你可以使用DT <- dat[, mean(dat[[col]]), time] -
你试过函数
f1即f1(data, 'Var1') -
是的,它奏效了。我看到了区别。
标签: r function data.table