DataTable 목록의 연속 setdiff.
-
11-12-2019 - |
문제
로 구성된 데이터 사용
dtl <- replicate(10,data.table(id=sample(letters,10),val=sample(10)), simplify=F)
lapply(dtl, function(x){setkey(x,'id')})
.
DTL [[n]]에없는 ID 에없는 ID 에있는 DTL [[N + 1]]의 행을 포함하는 DataTables 목록을 추출해야합니다.나는 그것이 와 같을 것이라고 가정한다.
.
dtl2 <- list(setdiff(dtl[[1]][['id']],dtl[[2]][['id']]),setdiff(dtl[[2]][['id']],dtl[[3]][['id']]...)
SetDiff는 ID 열만 고려해야하지만 결과에 결과가 각 DataTable의 모든 열을 포함 할 것으로 예상됩니다.
해결책
이것은 이것이 당신을 위해 그것을 할 것이라고 생각합니다 :
mapply(setdiff, head(dtl, -1), tail(dtl, -1), SIMPLIFY = FALSE)
.
편집 : 새로운 예상 출력을 사용하면 위와 같이 mapply
를 여전히 사용하지만 다음 두 가지 변경 사항 중 하나는 다음과 같습니다.
-
setdiff
를function(x,y)setdiff(x$id, y$id)
로 바꿉니다. -
dtl
를ids <- lapply(dtl, "[", "id")
로 바꿉니다.edit2 : : 당신이 제공 한 코드와 일치하지 않는 일반 영어 설명을 추가하여 예상 출력을 다시 변경했습니다 ... i 생각하기 이제 이것을 찾고 있습니다 :
.mapply(function(x,y)y[setdiff(y$id, x$id), ], head(dtl, -1), tail(dtl, -1), SIMPLIFY = FALSE)
제휴하지 않습니다 StackOverflow