Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于R中时间段的数据帧列的总和_R_Sum - Fatal编程技术网

基于R中时间段的数据帧列的总和

基于R中时间段的数据帧列的总和,r,sum,R,Sum,我有一个包含多列和多行的数据框架。这些数据是根据11年期间的月度观察结果得出的。现在,我想根据前12个月的观察结果计算每列的总和。例如,2005年1月的列总和基于2004年1月至2004年12月的观测值。2005年2月的数据基于2004年2月至2005年1月的观测数据,以此类推。我的原始数据框架包含10年的数据和月度数据。 我对数据框架的一部分进行了如下说明: df1 Month A B C Jan-04 0.003 0.006 NA Feb-04 0.0

我有一个包含多列和多行的数据框架。这些数据是根据11年期间的月度观察结果得出的。现在,我想根据前12个月的观察结果计算每列的总和。例如,2005年1月的列总和基于2004年1月至2004年12月的观测值。2005年2月的数据基于2004年2月至2005年1月的观测数据,以此类推。我的原始数据框架包含10年的数据和月度数据。 我对数据框架的一部分进行了如下说明:

df1
Month   A        B      C
Jan-04  0.003   0.006   NA
Feb-04  0.003   0.002   NA
Mar-04  -0.005  -0.001  NA
Apr-04  0.000   0.000   NA
May-04  0.000   -0.002  NA
Jun-04  -0.001  -0.001  NA
Jul-04  -0.001  -0.001  NA
Aug-04  -0.010  NA      NA
Sep-04  0.001   NA      NA
Oct-04  0.002   NA      NA
Nov-04  -0.003  NA      NA
Dec-04  -0.003  NA      NA
Jan-05  0.005  -0.002   NA
Feb-05  -0.0015 0.004   0.0003
Mar-05  -0.0041 0.002   0.0070
所需的结果数据帧

Month   A        B      C
Jan-05  -0.013  0.004   NA
Feb-05  -0.011  -0.004  NA
Mar-05  -0.0151 -0.0014 0.0003

这是一个以R为基数的解决方案。首先,我们定义一个函数,根据与感兴趣日期的时间差对df进行子集,并找到该子集df上的列和,然后对所有感兴趣的时间点运行该函数

subset_last_year <- function(df, date, cols_to_sum = c("A", "B", "C")){
  date = as.POSIXct(date, format = "%d-%b-%y")
  df$Time_Difference = difftime(date, df$Month_Date, units = "weeks")
  df_last_year = df[df$Time_Difference > 0 & df$Time_Difference < 53, ]
  tmp_col_sum = colSums(df_last_year[ , cols_to_sum], na.rm = TRUE)
  return(tmp_col_sum)
}

#oddly you have to add days
df$Month_Date = paste0("01-", df$Month)
df$Month_Date = as.POSIXct(df$Month_Date, format = "%d-%b-%y")

#not worried about performance because the data set is not that large
dates = c("01-Jan-05", "01-Feb-05", "01-Mar-05")
res = data.frame()
for(i in 1:length(dates)){
  tmp = subset_last_year(df, dates[i])
  res = rbind(res, tmp)
}
rownames(res) = dates
colnames(res) = c("A", "B", "C")
subset\u上一年0&df$时间差<53,]
tmp_col_sum=colSums(df_上一年[,cols_to_sum],na.rm=TRUE)
返回值(tmp列和)
}
#奇怪的是,你必须增加天数
df$Month_Date=paste0(“01-”,df$Month)
df$Month\u Date=as.POSIXct(df$Month\u Date,格式=“%d-%b-%y”)
#不担心性能,因为数据集没有那么大
日期=c(“05年1月1日”、“05年2月1日”、“05年3月1日”)
res=data.frame()
适用于(i/1:长度(日期)){
tmp=上一年的子集(df,日期[i])
res=rbind(res,tmp)
}
行名(res)=日期
colnames(res)=c(“A”、“B”、“c”)

这里有一个以R为基数的解决方案。首先,我们定义一个函数,根据与感兴趣日期的时间差将df子集,并找到该子集df上的列和,然后对所有感兴趣的时间点运行该函数

subset_last_year <- function(df, date, cols_to_sum = c("A", "B", "C")){
  date = as.POSIXct(date, format = "%d-%b-%y")
  df$Time_Difference = difftime(date, df$Month_Date, units = "weeks")
  df_last_year = df[df$Time_Difference > 0 & df$Time_Difference < 53, ]
  tmp_col_sum = colSums(df_last_year[ , cols_to_sum], na.rm = TRUE)
  return(tmp_col_sum)
}

#oddly you have to add days
df$Month_Date = paste0("01-", df$Month)
df$Month_Date = as.POSIXct(df$Month_Date, format = "%d-%b-%y")

#not worried about performance because the data set is not that large
dates = c("01-Jan-05", "01-Feb-05", "01-Mar-05")
res = data.frame()
for(i in 1:length(dates)){
  tmp = subset_last_year(df, dates[i])
  res = rbind(res, tmp)
}
rownames(res) = dates
colnames(res) = c("A", "B", "C")
subset\u上一年0&df$时间差<53,]
tmp_col_sum=colSums(df_上一年[,cols_to_sum],na.rm=TRUE)
返回值(tmp列和)
}
#奇怪的是,你必须增加天数
df$Month_Date=paste0(“01-”,df$Month)
df$Month\u Date=as.POSIXct(df$Month\u Date,格式=“%d-%b-%y”)
#不担心性能,因为数据集没有那么大
日期=c(“05年1月1日”、“05年2月1日”、“05年3月1日”)
res=data.frame()
适用于(i/1:长度(日期)){
tmp=上一年的子集(df,日期[i])
res=rbind(res,tmp)
}
行名(res)=日期
colnames(res)=c(“A”、“B”、“c”)

自己尝试过任何东西,或者在SO?@danas.zuokas上搜索过类似的问题,但不幸的是,与我展示的tge场景没有任何相似之处。尝试
图书馆(动物园);图书馆(数据表);na.省略(setDT(df1)[,lapply(.SD,函数(x)lag(rollappy(x,12,函数(x)sum(x,na.rm=TRUE)),.SDcols=A:C])
@Aquarius只需将其更改为初始列名:最终列名(如果它是按顺序排列的)或使用列的索引即可numbers@akrun它现在工作得很好,但在一段时间内(12个月)只有一件事如果有所有的NAs,我收到的总和为零,但我要求它返回NA,我尝试过
is.NA(df)自己尝试过任何东西,或者在SO?@danas.zuokas上搜索过类似的问题,但不幸的是,没有类似于我展示的tge场景。尝试
library(zoo);图书馆(数据表);na.省略(setDT(df1)[,lapply(.SD,函数(x)lag(rollappy(x,12,函数(x)sum(x,na.rm=TRUE)),.SDcols=A:C])
@Aquarius只需将其更改为初始列名:最终列名(如果它是按顺序排列的)或使用列的索引即可numbers@akrun它现在工作得很好,但在一段时间内(12个月)只有一件事如果有所有的NAs,我收到的和为零,但我要求它返回NA,我尝试
is.NA(df)