Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.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_Dplyr_Data.table - Fatal编程技术网

R中移动和的计算

R中移动和的计算,r,dplyr,data.table,R,Dplyr,Data.table,我想在R中的数据表dt中找到一个变量的运行和,并想返回该运行和大于或等于该组另一列中提到的阈值的月份 library(data.table) dt <- data.table(pno = c("A","A","A","A","A","A","A","B","B", "B", "C", "C" ), month = c("Jan","Feb", "Mar", "Apr", "May", "Jun","Jul", "Jun", "Jul", "Aug", "

我想在R中的数据表
dt
中找到一个变量的运行和,并想返回该运行和大于或等于该组另一列中提到的阈值的月份

library(data.table)
dt <- data.table(pno = c("A","A","A","A","A","A","A","B","B", "B", "C", "C" ), 
                 month = c("Jan","Feb", "Mar", "Apr", "May", "Jun","Jul", "Jun", "Jul", "Aug", "Mar", "Apr"),
                 x = c(1,2,1,3,2,4,1,3,4,2,4,2),
                 min_x_reqd = c(5,5,5,5,5,5,5,3,3,3,4,4),
                 min_mon = c(4,4,4,4,4,4,4,3,3,3,2,2))
例如:根据上述数据,我想计算
min\u mon
中提到的移动窗口的每个
pno
x
之和。因此,当该总和大于或等于阈值时,如
min_x_reqd
中所述,我想返回该窗口的第一个月,其中它满足条件

因此,在我们的情况下,根据数据,我的输出应该是:

pno    month
A    Jan
B    Jun
C    Mar

如何使用data.table/dataframe进行计算。

我们可以使用
RcppRoll
中的
roll\u sum来计算滚动和,然后根据逻辑条件,将满足每个“pno”条件的第一个“月”子集

library(RcppRoll)
library(data.table)
dt[, .(month = month[which(roll_sum(x, min_mon[1], 
             fill = 0, align = "left") > min_x_reqd)[1]]), by = pno]
#   pno month
#1:   A   Jan
#2:   B   Jun
#3:   C   Mar

我们可以使用
RcppRoll
中的
roll\u sum
来计算滚动和,然后根据逻辑条件,将满足每个“pno”条件的第一个“月”子集

library(RcppRoll)
library(data.table)
dt[, .(month = month[which(roll_sum(x, min_mon[1], 
             fill = 0, align = "left") > min_x_reqd)[1]]), by = pno]
#   pno month
#1:   A   Jan
#2:   B   Jun
#3:   C   Mar

除了使用RcppRoll库中的roll_sum函数,还有其他方法吗?@Archit您可以使用
zoo
中的
rollsum
除了使用RcppRoll库中的roll_sum函数,还有其他方法吗?@Archit您可以使用
zoo
中的
rollsum