如何将不同行长的列绑定到数据框并根据 R 中的匹配 date/variable 复制相同的值?
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?
我有每 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)的方法(并复制相同日期的相同每日降雨量值)
我们将不胜感激。
应该可以通过时间戳变量合并:
# rename rain variable
names(dfag) <- c("timestamp", "dailyRain")
# merge data.frames
df <- merge(df, dfag, by="timestamp")
当您想保留行数时,请使用 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
我有每 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)的方法(并复制相同日期的相同每日降雨量值)
我们将不胜感激。
应该可以通过时间戳变量合并:
# rename rain variable
names(dfag) <- c("timestamp", "dailyRain")
# merge data.frames
df <- merge(df, dfag, by="timestamp")
当您想保留行数时,请使用 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