Tôi đang cố gắng tạo một cột mới cho biết ID có xuất hiện trong nhóm trước đó hay không. Đây là dữ liệu của tôi:Đối sánh trong nhóm bị tụt hậu trong dữ liệu.table
data <- data.table(ID = c(1:3, c(9,2,3,4),c(5,1)),
groups = c(rep(c("a", "b", "c"), c(3, 4,2))))
ID groups
1: 1 a
2: 2 a
3: 3 a
4: 9 b
5: 2 b
6: 3 b
7: 4 b
8: 5 c
9: 1 c
Tôi không chắc chắn cách chỉ định nhóm bị trễ. Tôi đã cố sử dụng shift
nhưng không hoạt động:
data[,.(ID=ID,match_lagged=ID %in% shift(ID)),by=groups]
Đây là kết quả mong muốn của tôi.
3 dòng đầu tiên không khớp vì không có nhóm trước. FALSE cũng sẽ làm việc cho ba hàng này. ID = 4 (trong nhóm b) không khớp với nhóm a. ID = 5 (trong nhóm c) không khớp với nhóm b.
Lưu ý rằng ID 1 trong nhóm c không được đối sánh trong nhóm b, vì vậy nó phải là sai mặc dù nó tồn tại trong nhóm a. Đây là lý do tại sao duplicated(data$ID)
không hoạt động. Dữ liệu từ một nhóm phải được đối sánh từ nhóm trước đó.
groups ID match_lagged
1: a 1 NA
2: a 2 NA
3: a 3 NA
4: b 9 FALSE
5: b 2 TRUE
6: b 3 TRUE
7: b 4 FALSE
8: c 5 FALSE
9: c 1 FALSE
Một giải pháp dplyr
cũng sẽ hoạt động.
'trùng lặp (dữ liệu $ ID)' không hoạt động? –
@ d.b Không, dữ liệu từ một nhóm phải được khớp từ nhóm ** trước đó **. Tôi đã chỉnh sửa câu hỏi để làm cho nó rõ ràng hơn về lý do tại sao 'trùng lặp' không hoạt động. –