我有一個有兩列的資料框架:
StartTime EndTime
1. 2019-05-06 08。 34: 15 2019-05-06 08。 48:30。
2. 2019-05-06 10。 07: 18 2019-05-06 10。 21:34。
3. 2019-05-06 15。 13: 10 2019-05-06 15。 27:26。
4. 2019-05-06 15。 35: 52 2019-05-06 15。 50: 07
5. 2019-05-06 16。 14: 18 2019-05-06 16。 33:58。
6. 2019-05-06 16。 58: 14 2019-05-06 17。 13:36。
7. 2019-05-06 20。 28: 50 2019-05-06 21。 05: 11
8. 2019-05-06 21。 55: 53 2019-05-06 22。 16:50。
9. 2019-05-06 22。 42: 21 2019-05-06 22。 57:46。
10. 2019年-05-06 23。 26: 59 2019-05-07 00。 03:46。
11. 2019年-05-07 00。 36: 43 2019-05-07 00。 53:44。
我想添加一個新的列(IdlingTime)來計算空閑時間。 比方說,第一行IdlingTime是。 第二行的StartTime - 第一行的EndTime = 1 HR 18 min 48 sec 并轉換為分鐘。
謝謝你的提議。
uj5u.com熱心網友回復:
這是我要做的。
df %>%
mutate_all(dmy_hm) %>%
mutate()
IdlingTime = as. double(lead(StartTime)/span>-EndTime。 單位= "mins")
)
uj5u.com熱心網友回復:
更新如果你的資料已經是POSIXct:那么
library(dplyr)
df %>%
mutate(IdlingTime = round(lead(StartTime)-EndTime))
輸出:
StartTime EndTime IdlingTime
<dttm> < dttm> <drtn>/span>
1 2019-05-06 08。 34: 15 2019-05-06 08。 48: 30 79分鐘
2 2019-05-06 10。 07: 18 2019-05-06 10。 21: 34 292分鐘
3 2019-05-06 15。 13: 10 2019-05-06 15。 27: 26 8 分鐘
4 2019-05-06 15。 35: 52 2019-05-06 15。 50: 07 24 mins
5 2019-05-06 16。 14: 18 2019-05-06 16。 33: 58 24 mins
6 2019-05-06 16。 58: 14 2019-05-06 17。 13: 36 195 分鐘
7 2019-05-06 20。 28: 50 2019-05-06 21。 05: 11 51 分鐘
8 2019-05-06 21。 55: 53 2019-05-06 22。 16: 50 26 mins
9 2019-05-06 22。 42: 21 2019-05-06 22。 57:46 29 mins
10 2019-05-06 23。 26: 59 2019-05-07 00。 03: 46 33 分鐘
11 2019-05-07 00。 36: 43 2019-05-07 00。 53: 44 NA mins
第一個答案:
在得到正確的類datetime后,我們可以使用dplyr包的lead函式:
library(dplyr) library(lubridate)
df %>%
#mutate(across(contains("Time"), ~ymd_hms(.) )
IdlingTime = lead(StartTime)-EndTime)
輸出:
StartTime EndTime IdlingTime
<dttm> < dttm> <drtn>/span>
1 2019-05-06 08。 34: 15 2019-05-06 08。 48:30 78. 800000分鐘
2 2019-05-06 10。 07: 18 2019-05-06 10。 21: 34 291. 600000分鐘
3 2019-05-06 15。 13: 10 2019-05-06 15。 27: 26 8. 433333分鐘
4 2019-05-06 15。 35: 52 2019-05-06 15。 50: 07 24. 183333分鐘
5 2019-05-06 16。 14: 18 2019-05-06 16。 33: 58 24. 266667分鐘
6 2019-05-06 16。 58: 14 2019-05-06 17。 13: 36 195. 233333分鐘
7 2019-05-06 20。 28: 50 2019-05-06 21。 05: 11 50. 700000分鐘
8 2019-05-06 21。 55: 53 2019-05-06 22。 16: 50 25. 516667分鐘
9 2019-05-06 22。 42: 21 2019-05-06 22。 57: 46 29. 216667分鐘
10 2019-05-06 23。 26: 59 2019-05-07 00。 03: 46 32. 950000分鐘
11 2019-05-07 00。 36: 43 2019-05-07 00。 53: 44 NA mins
uj5u.com熱心網友回復:
你只需減去各欄。
這里是給定更新的問題的(可重復的,用你的資料!!)代碼。 我使用data.table,它在讀取時將資料列決議為POSIXct,并且使lead/lag也很容易
代碼
library(data.table)
資料<- fread(text="startTime,EndTime
2019-05-06 08:34:15,2019-05-06 08:48:30
2019-05-06 10:07:18,2019-05-06 10:21:34
2019-05-06 15:13:10,2019-05-06 15:27:26
2019-05-06 15:35:52,2019-05-06 15:50:07
2019-05-06 16:14:18,2019-05-06 16:33:58
2019-05-06 16:58:14,2019-05-06 17:13:36
2019-05-06 20:28:50,2019-05-06 21:05:11
2019-05-06 21:55:53,2019-05-06 22:16:50
2019-05-06 22:42:21,2019-05-06 22:57:46
2019-05-06 23:26:59,2019-05-07 00:03:46
2019-05-07 00:36:43,2019-05-07 00:53:44")
data[, minElapsed := as. numeric(EndTime -StartTime)]
data[, idleMin := as. numeric(StartTime - shift(EndTime))】
資料
輸出
> library(data.table)
> data <- fread(text="startTime,endTime
2019-05-06 08:34:15,2019-05-06 08:48:30
2019-05-06 10:07:18,2019-05-06 10:21:34
2019-05-06 15:13:10,2019-05-06 15:27:26
2019-05-06 15:35:52,2019-05-06 15:50:07
2019-05-06 16:14:18,2019-05-06 16:33:58
2019-05-06 16:58:14,2019-05-06 17:13:36
2019-05-06 20:28:50,2019-05-06 21:05:11
2019-05-06 21:55:53,2019-05-06 22:16:50
2019-05-06 22:42:21,2019-05-06 22:57:46
2019-05-06 23:26:59,2019-05-07 00:03:46
2019-05-07 00:36:43,2019-05-07 00:53:44")
>
> data[, minElapsed:= as. numeric(EndTime -StartTime)]
> data[, idleMin := as. numeric(StartTime - shift(EndTime))】
>資料
開始時間 結束時間 minElapsed idleMin
1: 2019-05-06 08。 34: 15 2019-05-06 08。 48: 30 14. 2500 NA NA
2: 2019-05-06 10。 07: 18 2019-05-06 10。 21: 34 14. 2667 78.80000 14.
3。 2019-05-06 15。 13: 10 2019-05-06 15。 27: 26 14. 2667 291.60000 14.
4。 2019-05-06 15。 35: 52 2019-05-06 15。 50: 07 14. 2500 8.43333 14.
5。 2019-05-06 16。 14: 18 2019-05-06 16。 33: 58 19. 6667 24.18333 19.
6: 2019-05-06 16。 58: 14 2019-05-06 17。 13: 36 15. 3667 24.26667 15.
7。 2019-05-06 20。 28: 50 2019-05-06 21。 05: 11 36. 3500 195.23333 36.
8。 2019-05-06 21。 55: 53 2019-05-06 22。 16:50 20. 9500 50.70000 20.
9: 2019-05-06 22。 42: 21 2019-05-06 22。 57:46 15. 4167 25.51667 25.
10: 2019-05-06 23。 26: 59 2019-05-07 00。 03: 46 36. 7833 29.21667 36.
11。 2019-05-07 00。 36: 43 2019-05-07 00。 53: 44 17. 0167 32.95000 17.
>/span>
下面是原始答案
。代碼
data <- read.csv(text="startTime,EndTime
2019-05-06 08:34:15,2019-05-06 08:48:30
2019-05-06 10:07:18,2019-05-06 10:21:34
2019-05-06 15:13:10,2019-05-06 15:27:26
2019-05-06 15:35:52,2019-05-06 15:50:07
2019-05-06 16:14:18,2019-05-06 16:33:58
2019-05-06 16:58:14,2019-05-06 17:13:36
2019-05-06 20:28:50,2019-05-06 21:05:11
2019-05-06 21:55:53,2019-05-06 22:16:50
2019-05-06 22:42:21,2019-05-06 22:57:46
2019-05-06 23:26:59,2019-05-07 00:03:46
2019-05-07 00:36:43,2019-05-07 00:53:44")
data$StartTime <- as.POSIXct(data$StartTime)
data$EndTime <- as.POSIXct(data$EndTime)
data$IdlingTime <- Data$EndTime - data$StartTime
data$IdlingTimeMin <- as. numeric(data$EndTime - data$StartTime)
輸出
> data
開始時間 結束時間 空閑時間 空閑時間最小值
1 2019-05-06 08。 34: 15 2019-05-06 08。 48:30 14. 2500分鐘 14.2500。
2 2019-05-06 10。 07: 18 2019-05-06 10。 21: 34 14. 2667 mins 14.2667
3 2019-05-06 15。 13: 10 2019-05-06 15。 27: 26 14. 2667 mins 14.2667
4 2019-05-06 15。 35: 52 2019-05-06 15。 50: 07 14. 2500分鐘 14.2500。
5 2019-05-06 16。 14: 18 2019-05-06 16。 33:58 19. 6667 mins 19.6667
6 2019-05-06 16。 58: 14 2019-05-06 17。 13: 36 15. 3667 mins 15.3667
7 2019-05-06 20。 28: 50 2019-05-06 21。 05: 11 36. 3500 mins 36.3500
8 2019-05-06 21。 55: 53 2019-05-06 22。 16: 50 20. 9500 mins 20.9500
9 2019-05-06 22。 42: 21 2019-05-06 22。 57: 46 15. 4167 mins 15.4167
10 2019-05-06 23。 26: 59 2019-05-07 00。 03: 46 36. 7833 mins 36.7833
11 2019-05-07 00。 36: 43 2019-05-07 00。 53:44 17. 0167 mins 17.0167
>/span>
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/312020.html
標籤:
