r - 根据计算在数据框中插入行

标签 r dataframe rep

我对 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)

打印出来的样子是这样的:
# 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

对于每个组件,我想填充一个计算列“Interval_Time”,它是 First 的 Start Time + Report_Time 的总和,然后如果它小于 End_Time,则插入一行 Interval_Time(最后一个总和)+ Interval 的总和。重复插入直到 Interval 时间的总和小于 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

我一直试图在 for 循环中使用 if 来实现这一点......但没有成功。

最佳答案

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

关于r - 根据计算在数据框中插入行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43751981/

相关文章:

R 重复序列每个重复加 1

r - 如何从 rep() 函数返回的向量创建矩阵?

r - 使用stringr分割向量,结果长度意外

r - 找不到 KDE 安装 - RKWard

r - 使用另一个 data.frame 的列对 data.frame 进行排序

Python Pandas Group By 错误 'Index' 对象没有属性 'labels'

r - write.csv() 极其意外的行为

r - 我应该如何从 R data.table 中删除 NA block

python - 如何在数据框中集成字典列表?

r - 在 R 中创建向量序列