使用函数从聚合创建数据框

时间:2014-04-11 02:53:48

标签: r

这是Can I subset specific years and months directly from POSIXct datetimes?

中我的问题的后续行动

我有一个数据框

test <- data.frame(seq(from = as.POSIXct("1983-03-09 01:00"), to = as.POSIXct("1985-01-08 00:00"), by = "hour"))
colnames(test) <- "DateTime"
test$Value<-sample(0:100,16104,rep=TRUE)

我正在使用

对特定年份和月份进行分类
# Add year column
test$Year <- as.numeric(format(test$DateTime, "%Y"))

# Add month column
test$Month <- as.numeric(format(test$DateTime, "%m"))

# Subset specific year (1984 in this case)
sub1 = subset(test, Year!="1983" & Year!="1985")

# Subset specific months (April and May in this case)
sub2 = subset(test, Month=="4" | Month=="5")

从这些子集sub1sub2,我想使用每小时数据来计算Value列中的每日最小值,平均值和最大值。

我在Aggregating hourly data into daily aggregates

找到了解决方案
stat <- function(x) c(min = min(x), max = max(x), mean = mean(x))
sub1$Date <- as.Date(sub1$DateTime)
sub2$Date <- as.Date(sub2$DateTime)
aggregate(Value ~ Date, sub1, stat)
aggregate(Value ~ Date, sub2, stat)

这似乎给出了列中的最小值,平均值和最大值(虽然我无法验证,因为我无法读取R输出窗口中的顶部)。我需要将这些aggregate结果放入包含Dateminmeanmax的数据框中。有谁知道我怎么做?我试过了

sub1.sum <- aggregate(Value ~ Date, sub1, stat)

sub1.sum <- as.data.frame(aggregate(Value ~ Date, sub1, stat))

但似乎只返回一个值(我不确定这是最小值,平均值还是最大值)。

1 个答案:

答案 0 :(得分:1)

我想,

cbind(sub1.sum[,-2, drop=FALSE], as.data.frame(sub1.sum$Value))会给你你想要的东西。之前的问题是由3个维度(最小值,平均值,最大值)组成的值列...