我有这个数据框,“数据”,包含每半小时收集的一整年的数据,但有些日子只收集了几个小时的数据 .
日期格式为: 31.01.2010 00:30
(所有在一个单元格中)变量为: Temperature
, humidity
, PM10
, windspeed
等 .
First question :我如何计算这些变量的每日平均值,中位数,最大值,最小值,值,以便我可以在进一步分析中测试每一个,例如使用GAM进行生存分析),而不是每小时/半小时数据?
显然,计算的每日平均值/中位数应分配到相应的日期 .
Second question : DATES
列同时包含日期和时间,在同一单元格中以一个空格分隔 . 在R中,它的类型是 'Factor'
,我无法进行任何计算,因为出现错误 "dates" is missing
.
我的猜测是我需要先将它从 Factor
转换为 date/time
所以它可以被识别然后计算均值/中位数 . 但是我该怎么做?
你能说明一下要使用的参数/功能吗?
我认为我已经解决了从'Factor'到POSIXlt的日期转换:我使用函数strptime(Data $ DATES,format =“%d . %m . %Y%H:%M”)现在$ DATES是被识别为POSIXlt,格式为“2010-01-01 00:00:00”....
但我仍然需要找到计算每日平均值或平均值或中位数或其他值的函数 .
2 回答
这个问题有几个部分 . 在计算中值统计量之前,您需要按摩数据帧以使其具有适当的类型 .
对于这些解释,我将假设您有一个名为
dt
的数据帧 .Part 1: Converting the datatypes of the dataframe
date factor to datetime StackOverflow
datetime POSIXct conversion StackOverflow
首先,您需要将
Date
列从factor
类型转换为datetime
类型 .然后,因为我假设你想要
day-month-year
的中位数统计,不包括时间,我们'll need to extract that info. You' ll想把它放在一个新列中以保留时间 .Part 2: Calculating summary statistics grouped by a particular field
现在我们已经让数据框看起来像我们想要的那样,您可以计算按
day-month-year
分组的平均统计数据,在我们的例子中是date_alt
列 .plyr
包提供了一个非常好的功能:ddply
Breaking down the ddply call:
ddply cookbook explanation
ddply
本质上是一个作用于数据帧的函数 . 这是函数调用的参数细分:dt
- 要迭代的数据帧的名称.(date_alt)
- 要分组的列的名称 . 从概念上讲,这会将数据帧拆分为一堆子数据帧,这些子数据行的行由原始数据帧中的行组成,这些行在括号中列出的列中共享相同的值 .summarize
- 这告诉ddply
调用您要计算子数据帧的聚合统计信息med_temp = median(Temperature)
和所有类似的行 - 在结果数据框中定义一列 . 这表示您希望新数据框有一个名为med_temp
的列,其中包含每个子数据帧的median(Tempurature)
结果 . 请记住,您可以使用您想要的任何功能来代替median
而不是median
.首先,将您的时间序列转换为
xts
对象 . 然后使用xts
函数计算所需的数据,例如apply.daily()
参见xts
vignette here .我认为以下代码段应该有效:
(或者,见RFiddle)