【发布时间】:2019-03-03 06:50:48
【问题描述】:
我简单地连接了 2 个数据表,如下所示:
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),而且我阅读它比其他方式慢。
解决此问题的最佳方法是什么(如果有更多列和重复项;这只是为了说明问题)?
【问题讨论】:
-
DT2[DT1[,-"x1"],on = c(Idx2 = "Idx")]怎么样 -
好的,谢谢,现在这与 j 表达式中通常的列表语法无关。我仍然想知道,如果我想使用列表语法,我可以通过这样做选择除一列之外的所有列吗?类似
.(Idx2,x1,x2,x3,targetcol),但更简洁?列的顺序也不同于merge
标签: r data.table