我有一個資料集,其中包含會話 ID、用戶 ID、UNIX 中的時間戳(我使用 lubridate 轉換)和轉換后的時間戳列。
會議 | 用戶 | ts_UNIX | 時間戳 |
---|---|---|---|
123 | 345 | UNIX 時間戳 | 14-06-2022 17:44:32 |
123 | 345 | UNIX 時間戳 | 14-06-2022 17:44:33 |
123 | 345 | UNIX 時間戳 | 14-06-2022 17:44:37 |
124 | 346 | UNIX 時間戳 | 14-06-2022 15:50:10 |
124 | 346 | UNIX 時間戳 | 14-06-2022 15:51:01 |
124 | 346 | UNIX 時間戳 | 14-06-2022 16:30:00 |
125 | 345 | UNIX 時間戳 | 14-06-2022 23:55:30 |
125 | 345 | UNIX 時間戳 | 14-06-2022 23:58:50 |
125 | 345 | UNIX 時間戳 | 14-06-2022 23:59:45 |
125 | 345 | UNIX 時間戳 | 15-06-2022 00:00:32 |
125 | 345 | UNIX 時間戳 | 15-06-2022 00:00:59 |
我想添加另一個名為 session_duration(以秒為單位)的列,它是按會話和用戶分組的 max_time 和 min_time 之間的差異。例如,對于會話 #123 和用戶 345,會話持續時間為 [14-06-2022 17:44:37] - [14-06-2022 17:44:32],即 5 秒。
會議 | 用戶 | ts_UNIX | 時間戳 | session_duration(秒) |
---|---|---|---|---|
123 | 345 | UNIX 時間戳 | 14-06-2022 17:44:32 | 5 |
123 | 345 | UNIX 時間戳 | 14-06-2022 17:44:33 | 5 |
123 | 345 | UNIX 時間戳 | 14-06-2022 17:44:37 | 5 |
124 | 346 | UNIX 時間戳 | 14-06-2022 15:50:10 | 2390 |
124 | 346 | UNIX 時間戳 | 14-06-2022 15:51:01 | 2390 |
124 | 346 | UNIX 時間戳 | 14-06-2022 16:30:00 | 2390 |
125 | 345 | UNIX 時間戳 | 14-06-2022 23:55:30 | 329 |
125 | 345 | UNIX 時間戳 | 14-06-2022 23:58:50 | 329 |
125 | 345 | UNIX 時間戳 | 14-06-2022 23:59:45 | 329 |
125 | 345 | UNIX 時間戳 | 15-06-2022 00:00:32 | 329 |
125 | 345 | UNIX 時間戳 | 15-06-2022 00:00:59 | 329 |
這就是我當前的代碼的樣子。時間戳已成功轉換,但我遇到了會話持續時間列的問題。
library(tidyverse)
library(lubridate)
df <- df %>%
mutate(timestamp = as_datetime(ts_unix/1000)) %>%
group_by (session, user, timestamp) %>%
mutate(session_duration = difftime (max(timestamp), min(timestamp), units = "secs"))
有人可以幫我弄清楚 session_duration 列嗎?謝謝你。
uj5u.com熱心網友回復:
library(data.table)
setDT(df)[, duration := max(TimeStamp) - min(TimeStamp), by = .(Session)][]
# Session User ts_UNIX TimeStamp duration
# 1: 123 345 UNIX Timestamp 2022-06-14 17:44:32 5 secs
# 2: 123 345 UNIX Timestamp 2022-06-14 17:44:33 5 secs
# 3: 123 345 UNIX Timestamp 2022-06-14 17:44:37 5 secs
# 4: 124 346 UNIX Timestamp 2022-06-14 15:50:10 2390 secs
# 5: 124 346 UNIX Timestamp 2022-06-14 15:51:01 2390 secs
# 6: 124 346 UNIX Timestamp 2022-06-14 16:30:00 2390 secs
# 7: 125 345 UNIX Timestamp 2022-06-14 23:55:30 329 secs
# 8: 125 345 UNIX Timestamp 2022-06-14 23:58:50 329 secs
# 9: 125 345 UNIX Timestamp 2022-06-14 23:59:45 329 secs
#10: 125 345 UNIX Timestamp 2022-06-15 00:00:32 329 secs
#11: 125 345 UNIX Timestamp 2022-06-15 00:00:59 329 secs
樣本資料
df <- fread("Session User ts_UNIX TimeStamp
123 345 UNIX Timestamp 14-06-2022T17:44:32
123 345 UNIX Timestamp 14-06-2022T17:44:33
123 345 UNIX Timestamp 14-06-2022T17:44:37
124 346 UNIX Timestamp 14-06-2022T15:50:10
124 346 UNIX Timestamp 14-06-2022T15:51:01
124 346 UNIX Timestamp 14-06-2022T16:30:00
125 345 UNIX Timestamp 14-06-2022T23:55:30
125 345 UNIX Timestamp 14-06-2022T23:58:50
125 345 UNIX Timestamp 14-06-2022T23:59:45
125 345 UNIX Timestamp 15-06-2022T00:00:32
125 345 UNIX Timestamp 15-06-2022T00:00:59")
df[, TimeStamp := as.POSIXct(TimeStamp, format= "%d-%m-%YT%H:%M:%S")]
uj5u.com熱心網友回復:
library(tidyverse)
library(lubridate)
df %>%
group_by(Session, User) %>%
mutate(session_duration = max(TimeStamp) - min(TimeStamp))
# A tibble: 11 × 5
# Groups: Session, User [3]
Session User ts_UNIX TimeStamp session_duration
<dbl> <dbl> <chr> <dttm> <drtn>
1 123 345 UNIX Timestamp 2022-06-14 17:44:32 5 secs
2 123 345 UNIX Timestamp 2022-06-14 17:44:33 5 secs
3 123 345 UNIX Timestamp 2022-06-14 17:44:37 5 secs
4 124 346 UNIX Timestamp 2022-06-14 15:50:10 2390 secs
5 124 346 UNIX Timestamp 2022-06-14 15:51:01 2390 secs
6 124 346 UNIX Timestamp 2022-06-14 16:30:00 2390 secs
7 125 345 UNIX Timestamp 2022-06-14 23:55:30 329 secs
8 125 345 UNIX Timestamp 2022-06-14 23:58:50 329 secs
9 125 345 UNIX Timestamp 2022-06-14 23:59:45 329 secs
10 125 345 UNIX Timestamp 2022-06-15 00:00:32 329 secs
11 125 345 UNIX Timestamp 2022-06-15 00:00:59 329 secs
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/496325.html
上一篇:“TypeError:'datetime.datetime'物件不可呼叫”關于使用discord.py制作不和諧機器人
下一篇:熊貓生日不承認六月節