【发布时间】:2021-10-18 21:17:27
【问题描述】:
我有一个阶段开始时间和阶段结束时间的数据框。我想从前一阶段的结束时间中减去一个阶段的开始时间。即,我想从一列和另一列中的 n-1 单元格中减去第 n 个单元格。这在 Excel 中很容易做到,但我不确定如何在 R 中做到这一点。
这是数据的样子。我也包含了数据的 dput():
#test data frame
Stage StartTime EndTime
102 2021-07-19 17:23:00 2021-07-19 21:53:24
103 2021-07-19 21:54:00 2021-07-19 23:00:14
104 2021-07-19 23:01:00 2021-07-20 00:50:10
105 2021-07-20 00:51:00 2021-07-20 01:50:58
106 2021-07-20 01:51:00 2021-07-20 03:28:22
107 2021-07-20 03:29:00 2021-07-20 04:28:00
108 2021-07-20 05:38:00 2021-07-20 08:19:26
> dput(test[1:7,])
structure(list(Stage = c(102, 103, 104, 105, 106, 107, 108),
StartTime = structure(c(1626733380, 1626749640, 1626753660,
1626760260, 1626763860, 1626769740, 1626777480), tzone = "", class = c("POSIXct",
"POSIXt")), EndTime = structure(c(1626749604, 1626753614,
1626760210, 1626763858, 1626769702, 1626773280, 1626787166
), tzone = "", class = c("POSIXct", "POSIXt")), row.names = c(NA, -7L), class = c("tbl_df",
"tbl", "data.frame"))
例如,我知道我可以手动执行以下操作来获取阶段 102 结束和阶段 103 开始之间的时间差:
as.numeric(difftime("2021-07-19 21:54:00", "2021-07-19 21:53:24", units='sec'))
> 36
我试图使它更通用,但这不起作用。但是,我们的想法是每次都将 1 添加到行索引:
#does not work
# want to subtract row 2, col 2 - the later starting time
# from row 1, col 3 - the earlier end time
as.numeric(difftime(test[1,3], test[2,2], units='sec'))
保存时差的位置无关紧要,无论是数据框中的新列还是全新的数据框。什么都行。我真的不知道该怎么做。也许是一个循环?任何帮助,将不胜感激。谢谢。
【问题讨论】:
标签: r dataframe difference rowwise