R 根据列条件联接两个数据表
我想知道基于列条件的两个data.table的连接是如何工作的!那么使用哪一列,内部还是/在外部R 根据列条件联接两个数据表,r,data.table,R,Data.table,我想知道基于列条件的两个data.table的连接是如何工作的!那么使用哪一列,内部还是/在外部 require(data.table) outer <- data.table(KeyColumn=letters, value_outer=seq_along(letters)) inner <- data.table(KeyColumn=letters[4:6], value_inner=c(100,101,102)) setkey(outer, KeyColumn) setk
require(data.table)
outer <- data.table(KeyColumn=letters, value_outer=seq_along(letters))
inner <- data.table(KeyColumn=letters[4:6], value_inner=c(100,101,102))
setkey(outer, KeyColumn)
setkey(inner, KeyColumn)
outer[inner] # works as expected
inner[value_outer<10] # error as expected, because column doesn't exist in inner
outer[inner[value_outer<10], NewColumn := value_inner] # why does this work?
require(data.table)
外部感谢@eddi在评论中回答:
internal
查看它的列,没有找到value\u outer
,因此查看它的父环境,即outer
,因此value\u outer
与outer$value\u outer相同,如果value\u outer
列存在于internal
中,那么将使用它,否则,您编写的内容相当于outer[internal[outer[,value\u outer<10]],NewColumn:=value\u inner]
,现在您可以查看每个组件并了解发生了什么on@eddi其中inner[outer[,value\u outer<10]]
来自何处?@DavidArenburg我刚刚用一种等效的方式重写了OP的表达式(也就是说,如果internal
没有该列,我所拥有的和OP所写的都会做完全相同的事情),这样做的好处是,您可以单独查看每一件作品,以了解OP的表达式为何会起作用(而OP的表达式只是偶然起作用)@eddi,我知道你的代码是等效的,但我不明白OPs代码为什么工作,也就是说,引擎盖下发生了什么?你的行还是别的?internal
查看它的列,没有找到value\u outer
,所以查看它的父环境,即outer
,因此value\u outer
与相同ode>外部$value\u外部