如何根据R中每小时收集的天气变量数据计算日平均值中位数



我有一个数据框架"Data",包含大约每半小时收集一整年的数据,但有些日子只收集了几个小时的数据。

日期的格式为:31.01.2010 00:30(全部在一个单元格中)变量为:TemperaturehumidityPM10windspeed等。

第一个问题:我如何计算这些变量的日均值、中位数、最大值、最小值,以便在进一步的分析中测试它们中的每一个,例如使用GAM的生存分析,而不是每小时/半小时的数据?

显然,计算出的日平均值/中位数应该分配到相应的日期。

第二个问题DATES列同时包含日期和时间,在同一单元格中用一个空格分隔。在R中,它的类型是'Factor',我无法进行任何计算,因为出现了错误"dates" is missing

我的猜测是,我需要首先将其从Factor转换为date/time,以便对其进行识别,然后计算均值/中位数。但是我该怎么做呢?

你能指出要使用的参数/函数是什么吗?

我认为我已经解决了日期从"Factor"到POSIXlt的转换:我使用了函数strptime(Data$DATES,format="%d.%m.%Y%H:%m"),现在$DATES被识别为POSIXlt,format"2010-01-01 00:00:00"。。。。

但我仍然需要找到计算日均值或平均值或中位数或其他什么的函数。

首先,将时间序列转换为xts对象。然后使用xts函数(如apply.daily())计算所需的数据请参阅此处的xts小插曲。

我觉得以下片段应该有效:

# Load library xts
require(xts)
# Create example dataframe 
datetime <- c('31.01.2010 00:30', '31.01.2010 00:31', '31.01.2010 10:32', '01.02.2010 10:00', '01.02.2010 11:03', '01.03.2011 08:09', '01.03.2011 21:00', '01.03.2011 22:00')
value <- c(1.5, 2, 2.5, 7, 3.5, 9, 4.5, 7.5)
df <- data.frame(datetime, value)
# Create xts object
df.xts <- as.xts(df[,2], order.by=as.Date(df[,1], format='%d.%m.%Y %H:%M'))
# Daily mean
d.mean <- apply.daily(df.xts, mean)
# Daily median
d.median <- apply.daily(df.xts, median)
# Daily min
d.min <- apply.daily(df.xts, min)
# Daily max
d.max <- apply.daily(df.xts, max)

(或者,请参阅投标书)

这个问题有几个部分。在计算中值统计信息之前,需要对数据帧进行处理,使其具有适当的类型。

对于这些解释,我假设您有一个名为dt的数据帧。


第1部分:转换数据帧的数据类型

日期因子到日期时间StackOverflow

datetime POSIXct转换StackOverflow

首先需要将Date列从factor类型转换为datetime类型。

dt$Date <- strptime(x = as.character(dt$Date),
                    format = "%d.%m.%Y %H:%M")
dt$date_alt <- as.POSIXct(dt$date_alt) # convert the format of datetime to allow use with ddply

然后,由于我假设你想要day-month-year的中值统计数据,而不包括时间,我们需要提取这些信息。你会想把它放在一个新的专栏里,以保存时代。

dt$date_alt <- strptime(x = as.character(dt$Date),
       format = "%d.%m.%Y")


第2部分:计算按特定字段分组的汇总统计

现在,我们有了想要的数据帧,您可以计算按day-month-year分组的平均统计信息,在我们的情况下,它是date_alt列。

plyr包提供了一个非常好的功能:ddply

library(plyr) # need this library for the plyr call
summ <- ddply(dt, .(date_alt), summarize, 
              med_temp = median(!is.na(Temperature)),
              mean_temp = mean(!is.na(Temperature)), # you can also calc mean if you want
              med_humidity = median(!is.na(humidity)),
              med_windspeed = median(!is.na(windspeed))
              # etc for the rest of your vars
          )


分解ddply调用:

ddply食谱解释

CCD_ 25本质上是一个作用于数据帧的函数。以下是函数调用的参数分解:

  1. dt——要迭代的数据帧的名称
  2. .(date_alt)——要分组的列的名称。从概念上讲,这将数据帧拆分为一堆子数据帧,这些子数据帧的行由原始数据帧中的行组成,这些行在括号中列出的列中共享相同的值
  3. summarize——这告诉ddply调用您想要计算子数据帧的聚合统计信息
  4. CCD_ 30和所有类似的行——在结果数据帧中定义一列。这表示您希望新数据帧具有一个名为med_temp的列,该列包含每个子数据帧的median(Tempurature)结果。请记住,您可以使用聚合值所需的任何函数,而不是median

相关内容

  • 没有找到相关文章

最新更新