Tôi có một khung dữ liệu được thiết lập như sau:
df <- data.frame("id" = c(111,111,111,222,222,222,222,333,333,333,333),
"Location" = c("A","B","A","A","C","B","A","B","A","A","A"),
"Encounter" = c(1,2,3,1,2,3,4,1,2,3,4))
id Location Encounter
1 111 A 1
2 111 B 2
3 111 A 3
4 222 A 1
5 222 C 2
6 222 B 3
7 222 A 4
8 333 B 1
9 333 A 2
10 333 B 3
11 333 A 4
Về cơ bản, tôi đang cố gắng tạo một cờ nhị phân, một vị trí nằm trong Cuộc gặp gỡ trước đó cho mỗi nhóm id. Vì vậy, nó sẽ trông như:
id Location Encounter Flag
1 111 A 1 0
2 111 B 2 0
3 111 A 3 1
4 222 A 1 0
5 222 C 2 0
6 222 B 3 0
7 222 A 4 1
8 333 B 1 0
9 333 A 2 0
10 333 B 3 1
11 333 A 4 1
Tôi đã cố gắng tìm ra cách để thực hiện một câu lệnh if như:
library(dplyr)
df$Flag <- case_when((df$id - lag(df$id)) == 0 ~
case_when(df$Location == lag(df$Location, 1) |
df$Location == lag(df$Location, 2) |
df$Location == lag(df$Location, 3) ~ 1, T ~ 0), T ~ 0)
id Location Flag
1 111 A 0
2 111 B 0
3 111 A 1
4 222 A 0
5 222 C 0
6 222 B 0
7 222 A 1
8 333 B 0
9 333 A 1
10 333 B 1
11 333 A 1
Nhưng điều này có vấn đề trong đó Row 9 đang được gán 1 không chính xác và có những trường hợp có hơn 15 lần gặp trong dữ liệu thực tế nên điều này trở nên khá cồng kềnh. Tôi đã hy vọng tìm ra cách để làm một cái gì đó như
lag(df$Location, 1:df$Encounter)
Nhưng tôi biết lag()
cần một số nguyên cho k, vì vậy lệnh cụ thể sẽ không hoạt động.