1
시스템 내의 항목 이동을 추적하는 data.table
이 있습니다. 이 데이터를 ID
및 Location
의 두 필드를 기준으로 그룹화하고 싶습니다. I는 출력으로서 싶은 어떤연속적인 필드 값에 기초한 인덱싱
library(data.table)
example <- data.table(ID = rep(LETTERS[1:3], each = 6),
Location = c(1,2,3,1,2,1,2,2,2,3,3,1,2,3,3,3,1,3))
example
# ID Location
# 1: A 1
# 2: A 2
# 3: A 3
# 4: A 1
# 5: A 2
# 6: A 1
# 7: B 2
# 8: B 2
# 9: B 2
# 10: B 3
# 11: B 3
# 12: B 1
# 13: C 2
# 14: C 3
# 15: C 3
# 16: C 3
# 17: C 1
# 18: C 3
관계없이 새로운 위치가 무엇인지, 각 타임 위치 변화를 증가 번호와 새로운 열 (즉 그 위치가 기록 다른 곳에 존재하는 경우). 그룹 내에서 만 증가하는 this question의 반대가 아닙니다.
expected_output <- data.table(ID = rep(LETTERS[1:3], each = 6),
Location = c(1,2,3,1,2,1,2,2,2,3,3,1,2,3,3,3,1,3),
Group = c(1,2,3,4,5,6,1,1,1,2,2,3,1,2,2,2,3,4))
expected_output
# ID Location Group
# 1: A 1 1
# 2: A 2 2
# 3: A 3 3
# 4: A 1 4
# 5: A 2 5
# 6: A 1 6
# 7: B 2 1
# 8: B 2 1
# 9: B 2 1
# 10: B 3 2
# 11: B 3 2
# 12: B 1 3
# 13: C 2 1
# 14: C 3 2
# 15: C 3 2
# 16: C 3 2
# 17: C 1 3
# 18: C 3 4
는 지금까지 약간의 행운 by
인수의 몇 가지 조합을 시도했습니다. 가장 가까운 부분은 diff
인데, 변경이 발생하면 부분적으로 올바르게 표시되지만 내부적으로는 증가합니다.
output <- example
output[, Group := 1:.N, by = paste0(ID, Location, diff(Location))]
output
# ID Location Group
# 1: A 1 1
# 2: A 2 1 # not incrementing/new group
# 3: A 3 1 # not incrementing/new group
# 4: A 1 2
# 5: A 2 1
# 6: A 1 3
# 7: B 2 1
# 8: B 2 2 # incrementing when shouldn't
# 9: B 2 1
# 10: B 3 1
# 11: B 3 1
# 12: B 1 1
# 13: C 2 1
# 14: C 3 1
# 15: C 3 2
# 16: C 3 1
# 17: C 1 1
# 18: C 3 1
이 시점에서 나는 솔루션이 나를 빤히 쳐다보고 있다고 확신하지만 꽤 분실했다.
가 완벽하게 작동하는, 감사합니다! 나는 이전에'rleid '에 대해 알지 못했다. 그렇게하면 곧 받아 들일거야. – Gaffi