我只想从一整天定期拍摄的一组值中计算每日均值,但是在数据集中的多个不同日期。当我的日期是一个因素
时,tapply()很棒 > Data$Data <- as.factor(Data$Date)
> str(Data$Date)
Factor w/ 55 levels "01/05/2014","02/05/2014",..: 3 3 3 3 3 3 3 3 3 3 ...
> tapply(Data$Humidity,Data$Date, FUN = mean)
01/05/2014 02/05/2014 03/04/2014 03/05/2014 04/04/2014 04/05/2014 05/04/2014 05/05/2014 06/04/2014
99.96875 100.00000 96.65833 99.80625 84.14375 89.56042 93.75833 39.58750 87.55000
这给了我我想要的东西,但这些日期不再按照时间顺序排列,因为我已经把它作为一个因素。
相反,我尝试使用strptime()作为R的公认日期格式。从头开始....
> Data$Date<-strptime(Data$Date, format="%d/%m/%Y")
> str(Data$Date)
POSIXlt[1:2586], format: "2014-04-03" "2014-04-03" "2014-04-03" "2014-04-03" "2014-04-03" "2014-04-03" ...
> tapply(Data$Humidity,Data$Date, FUN = mean)
Error in INDEX[[i]] : subscript out of bounds
但是我收到以下错误消息?有谁知道为什么这不起作用?
答案 0 :(得分:1)
您可能希望查看像dplyr这样不需要像tapply函数这样的因素的包。 =&GT; http://cran.r-project.org/web/packages/dplyr/dplyr.pdf
语法就像,
DF <- your data frame
gb <- group_by(DF, Date)
DF <- mutate(gb, Mean_Humidity = mean(Humidity)
DF <- arrange(DF, date)
答案 1 :(得分:0)
您可以在执行tapply
tapply(Data$Humidity,factor(Data$Date), FUN = mean)
tapply
功能需要一个因素。
答案 2 :(得分:0)
我还发现我可以简单地将tapply()输出改为strptime(),之后通过dataframe()而不是之前尝试执行,然后按日期命令()
Data$Date <- as.factor(Data$Date)
DAVEH <- tapply(Data$Humidity,Data$Date, FUN = mean)
site.daily<-data.frame(c(names(DAVEH)),c(DAVEH))
rownames(site.daily)<-seq_len(nrow(site.daily))
colnames(site.daily)<-c("Date","DAVEH")
site.daily$Date<-strptime(site.daily$Date, format="%d/%m/%Y")
site.daily<-site.daily[order(site.daily$Date),]
rownames(site.daily)<-seq_len(nrow(site.daily)) # again as they have been re-ordered
> site.daily
Date DAVEH
1 2014-04-03 96.65833
2 2014-04-04 84.14375
3 2014-04-05 93.75833
4 2014-04-06 87.55000
5 2014-04-07 58.87708
6 2014-04-08 99.83542
7 2014-04-09 87.68125.....
等等。