은 단순히 2 datables의 가입 않는 조인중복 (COL)는 다음과 같이
set.seed(1)
DT1 <- data.table(
Idx = rep(1:100),
x1 = round(rnorm(100,0.75,0.3),2),
x2 = round(rnorm(100,0.75,0.3),2),
x3 = round(rnorm(100,0.75,0.3),2))
DT2 <- data.table(
Idx2 = rep(1:100),
x1 = round(rep(pi,100),2),
targetcol = rep(999,100))
DT2[DT1,on = c(Idx2 = "Idx")]
이 작동하지만 원하지 않는 결과의 열 i.x1
이 있습니다. 나는 단지 'targetcol', 따라서 이름을 포함하고 싶다. 이제 문제는 또 다른 예에서, 나는 그들 앞에 'i'가있는 이러한 중복 열이 많기 때문에 병합 중에 병합을 삭제하거나 더 잘 제외하고 싶습니다. 나는 이것이 X[Y,.(...)]
으로 가능해야한다는 것을 알고 있지만 에 점들을 채우는 올바른 방법을 찾지 못했다. 즉, i.x1
을 제외하고 모두 하나의 열을 제외하고 모두. 그래서 위의 목록 구문을 사용하여 데이터 테이블에서 여러 열을 선택하는 가장 좋은 방법은 무엇입니까?
merge(x = DT1, y = DT2[,c("Idx2","targetcol")], by.x = "Idx",by.y = "Idx2", all.x=TRUE)
을하지만 (x1.x
및 x1.y
)을 명명 다른 열의 순서로 연결하고, 또한, I는 다른 방법보다 느린 판독.
이 문제를 해결하는 가장 좋은 방법은 무엇입니까 (더 많은 열과 중복이있는 경우에도이 문제를 설명하기위한 것일뿐입니다)?
대해'DT2 [DT1 [- "X1"] = C를 (Idx2 = "하고 Idx")에]' – HubertL
확인 감사, 이제는 j 표현식의 일반적인 목록 구문과 아무런 관련이 없습니다. 그래도 목록 구문을 사용하려면 한 번만 열을 선택하면 될까요? Sthg는'. (Idx2, x1, x2, x3, targetcol) '과 유사하지만 더 간결합니까? 또한 열의 순서는 'merge'와 다릅니다. – user3032689