【问题标题】:How can I bind a column of different row length to a dataframe and copy the same values according to a matching date/variable in R?如何将不同行长度的列绑定到数据框并根据 R 中的匹配日期/变量复制相同的值?
【发布时间】:2016-08-10 11:33:43
【问题描述】:

我有每 30 分钟间隔的降雨量和水位数据(POSIXct 格式)。我根据每天汇总的降雨数据得到每日总降雨量。现在我想将同一日期的总降雨量添加到原始的 30 分钟间隔数据中。

df$Date_Time<-seq.POSIXt(as.POSIXct("2015-07-30 14:00:00",'%Y-%m-%d      
%H:%M:%S', tz="Etc/GMT-1"), as.POSIXct("2015-08-30 15:30:00",'%Y-%m-%d   
%H:%M:%S', tz="Etc/GMT-1"), by="30 min")
#Make POSIXct sequences and then some random variables for rainfall and water 
#level
df$PPT<-sample(seq(from = 0, to = 1, by = 0.2), size = 1492, replace = TRUE)
df$WL<-sample(seq(from = -50, to = 50, by = 0.5), size = 1492, replace =    
TRUE)
df<-as.data.frame(df)
df$timestamp<- factor(strftime(df$Date_Time, "%Y-%m-%d", tz="Etc/GMT-1"))
dfag<-aggregate(PPT~timestamp,data=df, FUN = sum, na.action=na.pass)
#aggregate sums of daily rainfall.

但是,我找不到根据时间戳绑定两个数据帧(df 和 dfag)的方法(并在同一日期复制相同的每日降雨量值)

我们将不胜感激。

【问题讨论】:

    标签: r time-series aggregate data-manipulation


    【解决方案1】:

    应该可以通过时间戳变量进行合并:

    # rename rain variable
    names(dfag) <- c("timestamp", "dailyRain")
    # merge data.frames
    df <- merge(df, dfag, by="timestamp")
    

    【讨论】:

      【解决方案2】:

      如果要保留行数,请使用ave 而不是aggregate

      df$PPTAggr<-ave(df$PPT,df$timestamp,FUN=sum)
      #head(df)
      #           Date_Time PPT    WL  timestamp PPTAggr
      #1 2015-07-30 14:00:00 0.8  -7.0 2015-07-30      10
      #2 2015-07-30 14:30:00 0.6  39.5 2015-07-30      10
      #3 2015-07-30 15:00:00 0.6  13.5 2015-07-30      10
      #4 2015-07-30 15:30:00 0.6 -49.0 2015-07-30      10
      #5 2015-07-30 16:00:00 0.2  12.0 2015-07-30      10
      #6 2015-07-30 16:30:00 0.6  34.0 2015-07-30      10
      

      【讨论】:

      • 另外,setDT(df)[, PPTAggr := sum(PPT) , by = timestamp]library(dplyr); df %&gt;% group_by(timestamp) %&gt;% mutate(PPTAggr = sum(PPT))
      • 像魅力一样工作。我更喜欢 ave 选项。但是这三个都有效。非常感谢!
      猜你喜欢
      • 2017-04-17
      • 2021-12-19
      • 2021-12-16
      • 2016-10-11
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多