需要帮助以加快此代码!
目标是创建一个数据帧,其中第一个DF的TPS(每秒事务数):TPS_Jan7_11h_13h_CheckIMEI将从记录1到30累积,然后重置为0并再次执行此操作.
这是图形形式的样子:
https://docs.google.com/spreadsheets/d/1-286za99C5gdHLDErR9B4ZazVrZFFINGaH3xzVMghFk/edit?usp=sharing
我的数据集有超过600万行......
我开始创建一个序列,我需要将我的累积变量重置为0.然后我浏览完整的数据集,只需添加上一个值.
我已经在四码x64 8gig机器上运行了几个小时并仍在运行......所以...疯狂的慢!
任何想法如何加快这一点?表格的子集或魔法?
这是代码:
# Create a sequence of when to reset the cumulative TPS
TPS_Jan7_11h_13h_CheckIMEI_seq30 <- seq(from = 1,nrow(TPS_Jan7_11h_13h_CheckIMEI),by = 30)
# Initialize Dataframe
TPS_Jan7_11h_13h_CheckIMEI_CumulTPS30 <- data.frame(matrix(ncol = 3, nrow = nrow(Jan7_11h_13h_CheckIMEI)))
colnames(TPS_Jan7_11h_13h_CheckIMEI_CumulTPS30) <- c("CumulTPS","100%","130%")
TPS_Jan7_11h_13h_CheckIMEI_CumulTPS30[2] = 1000*30
TPS_Jan7_11h_13h_CheckIMEI_CumulTPS30[3] = (1000*30)*1.3
CumulVal = 0
TPS_Jan7_11h_13h_CheckIMEI_CumulTPS30$CumulTPS[1] = TPS_Jan7_11h_13h_CheckIMEI$TPS[1]
for(i in 2:nrow(Jan7_11h_13h_CheckIMEI)) {
CumulVal = CumulVal + TPS_Jan7_11h_13h_CheckIMEI$TPS[i-1]
TPS_Jan7_11h_13h_CheckIMEI_CumulTPS30$CumulTPS[i] = CumulVal
# print(CumulVal)
if (i %in% TPS_Jan7_11h_13h_CheckIMEI_seq30) CumulVal = 0
}
Run Code Online (Sandbox Code Playgroud)
TPS DF只是TPS列上的TPS列表和第一列上的时间戳列表.
目标是重新创建我在电子表格示例中添加的内容,但是数百万行!
谢谢,
西蒙
使用dplyr将数据分组为30个记录的组,然后计算每个组中每个值的累积总和.
这是一些代码; 请注意,它需要一些细化来包含所有值 - 请查看剪切文档以获取帮助:
library(dplyr)
# Create a sequence of when to reset the cumulative TPS
TPS_Jan7_11h_13h_CheckIMEI_seq30 <- seq(from = 1,nrow(TPS_Jan7_11h_13h_CheckIMEI),by = 30)
#use cut() to add a factor column to the data frame with a different level for each group of 30
TPS_Jan7_11h_13h_CheckIMEI_CumulTPS30$numgroup = cut(as.numeric(row.names(TPS_Jan7_11h_13h_CheckIMEI_CumulTPS30)), TPS_Jan7_11h_13h_CheckIMEI_seq30)
#aggregate by the new column and get the cumulative sum at each line, within each group
newdf = TPS_Jan7_11h_13h_CheckIMEI_CumulTPS30 %>% group_by(numgroup) %>% mutate(cumulsum = cumsum(TPS))
Run Code Online (Sandbox Code Playgroud)