我是R的新手,我正在尝试将Excel中完成的计算复制到R.
我有一个这样的数据框:
Component <- c("A", "B", "C")
Report_Time <- c(5781, 5781, 5781)
Interval <- c(700, 600, 800)
End_Time <- c(8281, 8281, 8281)
Start_Time <- c(800, 298, 780)
df <- data.frame(Component, Report_Time, Interval, End_Time, Start_Time)
Run Code Online (Sandbox Code Playgroud)
印刷时它看起来像这样:
# Component Report_Time Interval End_Time Start_Time
#1 A 5781 700 8281 800
#2 B 5781 600 8281 298
#3 C 5781 800 8281 780
Run Code Online (Sandbox Code Playgroud)
对于每个组件,我想填充计算列"Interval_Time",它是First的开始时间+ Report_Time的总和,然后如果它小于End_Time,则插入一个具有Interval_Time(Last sum)+ Interval之和的行.重复插入,直到Interval time中的和小于End_Time.
# Component Report_Time Interval End_Time Start_Time Interval_Time
#1 A 5781 700 8281 800 6581
#2 A 5781 700 8281 800 7281
#3 A 5781 700 8281 800 7981
#4 B 5781 1000 8281 298 6079
#5 B 5781 1000 8281 298 7079
#6 B 5781 1000 8281 298 8079
#7 C 5781 1200 8281 780 6561
#8 C 5781 1200 8281 780 7761
Run Code Online (Sandbox Code Playgroud)
如果在for循环中,我一直试图实现这一点..但是还没有成功.
和data.table
:
Component <- c("A", "B", "C")
Report_Time <- c(5781, 5781, 5781)
Interval <- c(700, 1000, 1200)
End_Time <- c(8281, 8281, 8281)
Start_Time <- c(800, 298, 780)
df <- data.frame(Component, Report_Time, Interval, End_Time, Start_Time)
library(data.table)
setDT(df)
df<-df[rep(1:.N,ceiling((End_Time-Start_Time-Report_Time)/Interval))]
df[,Interval_Time:=ifelse(.I==1,Start_Time+Report_Time,Start_Time+cumsum(Interval)+Report_Time-Interval),by=.(Component)]
df
Component Report_Time Interval End_Time Start_Time Interval_Time
1: A 5781 700 8281 800 6581
2: A 5781 700 8281 800 7281
3: A 5781 700 8281 800 7981
4: B 5781 1000 8281 298 6079
5: B 5781 1000 8281 298 7079
6: B 5781 1000 8281 298 8079
7: C 5781 1200 8281 780 6561
8: C 5781 1200 8281 780 7761
Run Code Online (Sandbox Code Playgroud)