R中移动和的计算
我想在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", "
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