[英]Assign value based on age of occurrence of event in R
我有一個縱向數據集,其中包含參與者年齡和一個變量,用於顯示參與者經歷事件 (0/1) 的年齡,如下所示。
id age event
1 0 0
1 1 0
1 2 0
1 3 0
1 4 0
1 5 0
2 0 0
2 1 1
2 2 1
2 3 1
2 4 1
2 5 1
3 0 0
3 1 0
3 2 0
3 3 1
3 4 1
3 5 1
根據事件是從未發生過 (0) 還是發生在 2 歲之前 (1) 或 2 歲之后 (2),我想生成一個名為 timing 的新變量並將每個參與者分配到一個組 (0 ,1,2) 如下:
id age event timing
1 0 0 0
1 1 0 0
1 2 0 0
1 3 0 0
1 4 0 0
1 5 0 0
2 0 0 1
2 1 1 1
2 2 1 1
2 3 1 1
2 4 1 1
2 5 1 1
3 0 0 2
3 1 0 2
3 2 0 2
3 3 1 2
3 4 1 2
3 5 1 2
我沒有很好的編碼技能,如果有人能提供幫助,我將不勝感激。
1.創建一個最小的可復制示例:
df <- structure(list(id = c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L,2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L),
age = c(0L, 1L, 2L, 3L, 4L,5L, 0L, 1L, 2L, 3L, 4L, 5L, 0L, 1L, 2L, 3L, 4L, 5L),
event = c(0L,0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L,1L)),
row.names = c(NA, -18L), class = "data.frame")
2.使用dplyr
的解決方案:
library(dplyr)
df %>%
left_join(df %>%
mutate(timing = if_else(age < 2 & event == 1, 1,
if_else(age >= 2 & event == 1, 2, 0))) %>%
group_by(id) %>%
summarize(timing = ifelse(1 %in% timing, 1,
ifelse(2 %in% timing, 2, 0)))
)
這將返回:
id age event timing
1 1 0 0 0
2 1 1 0 0
3 1 2 0 0
4 1 3 0 0
5 1 4 0 0
6 1 5 0 0
7 2 0 0 1
8 2 1 1 1
9 2 2 1 1
10 2 3 1 1
11 2 4 1 1
12 2 5 1 1
13 3 0 0 2
14 3 1 0 2
15 3 2 0 2
16 3 3 1 2
17 3 4 1 2
18 3 5 1 2
您指定的條件與預期的 output 沖突。因此很難確定您需要什么。 從直覺上講,如果事件從未發生,無論參與者的年齡大小, timing
值都應始終為 0。 如果正確,則以下嵌套的ifelse
子句會創建新變量:
df$timing <- ifelse(df$event==0, 0,
ifelse(df$event==1 & df$age==1, 1, 2))
結果:
df
id age event timing
1 1 0 0 0
2 1 1 0 0
3 1 2 0 0
4 1 3 0 0
5 1 4 0 0
6 1 5 0 0
7 2 0 0 0
8 2 1 1 1
9 2 2 1 2
10 2 3 1 2
11 2 4 1 2
12 2 5 1 2
13 3 0 0 0
14 3 1 0 0
15 3 2 0 0
16 3 3 1 2
17 3 4 1 2
18 3 5 1 2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.