我有以下資料框:
df = data.frame(date = c("2021-11-17", "2021-11-17", "2022-05-11", "2022-05-11", "2021-11-04", "2021-11-04", "2022-06-09", "2022-06-09"),
participant_id = rep(c("sub-x", "sub-y"), each = 4))
這樣,sub-x 有 4 行關聯(2 個不同的日期和每個日期 2 行)和 sub-y(最后 4 個日期)。
我想創建一個名為“會話”的新列,對于每個參與者,根據我們是處理與參與者關聯的 2 個中第一個日期的行還是行第二次約會。
它看起來像這樣:
df = data.frame(date = c("2021-11-17", "2021-11-17", "2022-05-11", "2022-05-11", "2021-11-04", "2021-11-04", "2022-06-09", "2022-06-09"),
participant_id = rep(c("sub-x", "sub-y"), each = 4)),
session = c("1", "1", "2", "2", "1", "1", "2", "2"))
注意:這只是我的資料樣本。實際上,每個會話日期有 28 行,參與者超過 400 人。
我怎樣才能做到這一點?
提前非常感謝!
uj5u.com熱心網友回復:
您可以使用data.table::rleid:
library(dplyr)
df %>%
group_by(participant_id) %>%
mutate(session = data.table::rleid(date))
# A tibble: 8 × 3
# Groups: participant_id [2]
date participant_id session
<chr> <chr> <int>
1 2021-11-17 sub-x 1
2 2021-11-17 sub-x 1
3 2022-05-11 sub-x 2
4 2022-05-11 sub-x 2
5 2021-11-04 sub-y 1
6 2021-11-04 sub-y 1
7 2022-06-09 sub-y 2
8 2022-06-09 sub-y 2
uj5u.com熱心網友回復:
使用 dplyr,按 id 分組,然后dense_rank()在每個 id 中使用:
library(dplyr)
df %>%
group_by(participant_id) %>%
mutate(session = dense_rank(date)) %>%
ungroup()
# A tibble: 8 × 3
date participant_id session
<chr> <chr> <int>
1 2021-11-17 sub-x 1
2 2021-11-17 sub-x 1
3 2022-05-11 sub-x 2
4 2022-05-11 sub-x 2
5 2021-11-04 sub-y 1
6 2021-11-04 sub-y 1
7 2022-06-09 sub-y 2
8 2022-06-09 sub-y 2
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/529425.html
標籤:r通过...分组
上一篇:Python:在特定列中洗掉value=0行。如果只有一個0,則洗掉整行
下一篇:在R中制作一個統計資料框
