在R中创建月平均值列

在R中创建月平均值列,r,dataframe,time-series,xts,lubridate,R,Dataframe,Time Series,Xts,Lubridate,我在R中有一个数据帧,其中每一行对应一个家庭。其中一列描述了2010年该家庭种植作物的日期。数据集的其余部分包含1000多列,描述了2007-2010年间这些家庭每天的温度 这是基本形式: Date 2007-01-01 2007-01-02 2007-01-03 1 2010-05-01 70 72 61 2 2010-02-10 63 59 73 3 2010-03-06

我在R中有一个数据帧,其中每一行对应一个家庭。其中一列描述了2010年该家庭种植作物的日期。数据集的其余部分包含1000多列,描述了2007-2010年间这些家庭每天的温度

这是基本形式:

        Date 2007-01-01 2007-01-02 2007-01-03
1 2010-05-01         70         72         61
2 2010-02-10         63         59         73
3 2010-03-06         60         59         81
我需要为每个家庭创建列,描述2010年之前三年中种植日期后两个月的月平均温度

例如:如果一个家庭在2010-05-01种植,我需要以下列:

  • 2007-05-01至2007-06-01的平均温度
  • 2007-06-02至2007-07-01的平均温度
  • 2008-05-01至2008-06-01的平均温度

  • 2009年06月02日至2009年07月01日的平均温度

我跳过了两个专栏,但你明白了。特定的代码会非常有用,但一般来说,我只是在寻找一种方法,根据另一列描述的日期从特定列中提取数据。

Hi@bricevk您可以使用apply函数。它允许您在数据上按列或按行使用函数

假设您的数据位于对象df中。它对df的列应用平均函数。给你列式的平均值。2表示列。假设每列为一天,则该wpuld为每日平均值

Averages <- apply(df,2,mean)

平均值我建议您使用tidyverse。然而,为了与这个宇宙兼容,你首先必须使你的数据标准化,即整洁。在您的示例中,如果您转换数据,以便按行对观察结果进行排序,而列是变量,那么事情就会变得更容易。如果我正确理解了您的数据,您可以让家庭种植树木(行名是种植日期?),然后控制温度。我会这样做:

    -----------------------------------------------------------------------------
    | Household ID | planting date | Date of control | Temperature controlled |
    -----------------------------------------------------------------------------
首先,通过以下示例,将您的种植日期存储为行名称以外的其他内容:

     library(dplyr)
     df <- tibble::rownames_to_column(data, "PlantingDate")

是否可以工作

是否有一个列唯一标识家庭或安全,以假定日期为
列?有多少个家庭(行)?@ChuckP有一列唯一标识家庭,它是“hhid”。我的缺点是没有将其包含在上面的小示例数据框中
     library(tidyr)
     df <- gather(df,"DateOfControl","Temperature",-c(PlantingDate,ID))
     library(lubridate)
     df %>%
     group_by(ID,PlantingDate,year(ControlDate),month(ControlDate)) %>%
     summarise(MeanT=mean(Temperature))