다음과 같이 데이터 프레임을 설정했습니다.
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
기본적으로 위치가 각 ID 그룹의 이전 Encounter에있는 이진 플래그를 만들려고합니다. 따라서 다음과 같습니다.
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
나는 if 문을 수행하는 방법을 알아 내려고 노력했다.
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
그러나 이것은 행 9에 1이 잘못 할당되는 문제가 있으며 실제 데이터에서 15 이상 발생하는 경우가있어서 꽤 번거로워집니다. 나는 같은 것을 할 수있는 방법을 찾기를 바랐다.
lag(df$Location, 1:df$Encounter)
그러나 lag()
k에 정수 가 필요하다는 것을 알고 특정 명령이 작동하지 않습니다.
스택 오버플로에 오신 것을 환영합니다! SO 루틴에 대한 통찰력을 요청했기 때문에 누군가가 귀하의 질문에 대답 할 때 수행 할 작업 에 대한 내용을 읽으 십시오 . 그 외에도 둘러보기를 하고 요청하는 방법을 읽는 것은 나쁜 생각이 아닙니다 (질문은 훌륭하지만 배지를 줄 것입니다). 이 주변에서 더 자주 Hope기를 바랍니다. 건배.
—
M--