고유 ID에 해당하는 레코드에 여러 데이터 테이블을 서브 세트하려고합니다. 비슷한 스레드는 here 및 here입니다. 이러한 솔루션은 각 데이터 테이블을 개별적으로 프로그래밍하는 경우 작동하지만 필자가 가지고있는 모든 데이터 테이블에서 코드를 실행하고 싶습니다.여러 데이터 테이블의 행을 제거하고 원본 데이터 테이블에 저장
내 데이터는 다음과 같이 보입니다 :
dt1 <- data.table(var1 = c("A", "B", "C"), var2 = c("...", "...", "..."), id = c("101", "105", "105"))
dt2 <- data.table(var1 = c("D", "E", "F"), var2 = c("...", "...", "..."), var3 = c("...", "...", "..."), id = c("110", "110", "139"))
dt3 <- data.table(var1 = c("B", "G", "H"), id = c("105", "113", "113"))
> dt1
var1 var2 id
1: A ... 101
2: B ... 105
3: C ... 105
> dt2
var1 var2 var3 id
1: D ... ... 110
2: E ... ... 110
3: F ... ... 139
> dt3
var1 id
1: B 105
2: G 113
3: H 113
을 나는 각각의 데이터 테이블이 결국이 될 수 있도록 모든 중복 ID를 제거 할 것 :
> dt1
var1 var2 id
1: A ... 101
> dt2
var1 var2 var3 id
3: F ... ... 139
> dt3
var1 id
1: B 105
내가 성공적으로 각 데이터를 부분 집합 수 테이블을 별도로 dt1 <- dt1[, if(.N==1) .SD, by = id]
등을 사용하여,하지만 대신에 한 번에 각 테이블을 업데이 트하고 싶습니다.
시도했습니다 lapply(list(dt1, dt2, dt3), function(x) x[, if(.N==1) .SD, by = id])
하지만 내 환경에서 내 테이블을 업데이트하지 않습니다. 예를 들어 sub <- lapply(list(dt1, dt2, dt3), function(x) x[, if(.N==1) .SD, by = id])
을 사용하여 목록에 결과를 저장하면 데이터 표를 dt1 <- as.data.table(sub[1])
등으로 저장할 수 있지만 피하려고하는 각 데이터 표를 수동으로 코딩합니다. 나는 또한 내 콘솔에서 list()
을 반환 한 lapply(names(sub), function(x) {assign(x, value=sub[[x]], envir=globalenv())})
을 시도했지만 내가 말할 수있는 한 아무것도 업데이트하지 않았습니다. 을 사용하여 제안 된 here을 사용하면 "names (x)는 (는) x와 동일한 길이의 문자 벡터 여야합니다."라는 오류가 발생했습니다.
원본 데이터 테이블에서 중복 ID 레코드를 동시에 제거하는 방법에 대한 제안 사항이 있습니까?