我有一個階段開始時間和階段結束時間的資料框。我想從前一階段的結束時間中減去一個階段的開始時間。即,我想從一列和另一列中的 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'))
時間差的保存位置無關緊要,無論是資料幀內的新列還是全新的資料幀。什么都行。我真的不知道該怎么做。也許是一個回圈?任何幫助,將不勝感激。謝謝你。
uj5u.com熱心網友回復:
您可以使用the滯后函式將日期作為向量處理,例如
library(tidyverse)
data_example <-
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")
)
))
tibble_df <- data_example |> as_tibble()
tibble_df |>
mutate(time_diff = difftime(StartTime,lag(EndTime)))
#> # A tibble: 7 x 4
#> Stage StartTime EndTime time_diff
#> <dbl> <dttm> <dttm> <drtn>
#> 1 102 2021-07-19 19:23:00 2021-07-19 23:53:24 NA secs
#> 2 103 2021-07-19 23:54:00 2021-07-20 01:00:14 36 secs
#> 3 104 2021-07-20 01:01:00 2021-07-20 02:50:10 46 secs
#> 4 105 2021-07-20 02:51:00 2021-07-20 03:50:58 50 secs
#> 5 106 2021-07-20 03:51:00 2021-07-20 05:28:22 2 secs
#> 6 107 2021-07-20 05:29:00 2021-07-20 06:28:00 38 secs
#> 7 108 2021-07-20 07:38:00 2021-07-20 10:19:26 4200 secs
由reprex 包(v2.0.1)于 2021 年 10 月 18 日創建
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/324593.html
上一篇:為R中不存在的資料創建行
下一篇:以行為條件,無回圈地修改所有列
