R 检索没有显式引用的列

R 检索没有显式引用的列,r,data.table,left-join,R,Data.table,Left Join,大家早上好 在data.table中,我发现使用左连接时,隐式提及列名(即不提及列所在的表)会导致意外结果,尽管列名是唯一的 虚拟数据 x <- data.table(a = 1:2); x # a # 1: 1 # 2: 2 y <- data.table(c = 1 ,d = 2); y # c d # 1: 1 2 也许值得一提的是x.c中的x指的是语法x[i]的位置,在本例中,表y 我的问题是,为什么明确提到表对于一项任务来说似

大家早上好

data.table
中,我发现使用左连接时,隐式提及列名(即不提及列所在的表)会导致意外结果,尽管列名是唯一的

虚拟数据

x <- data.table(a = 1:2); x
#    a
# 1: 1
# 2: 2
y <- data.table(c = 1
                ,d = 2); y 
#    c d
# 1: 1 2
也许值得一提的是
x.c
中的
x
指的是语法
x[i]
的位置,在本例中,表
y


我的问题是,为什么明确提到表对于一项任务来说似乎是基本的。还是我遗漏了什么?谢谢。

在我看来,第一次连接的结果是完全正确的,因为要合并的列被解释为相同的,即使它们有不同的名称。在我看来,您要寻找的不仅仅是一个join,您需要的是类似于
cbind.fill(x,y,fill=NA)
的库
rowr
。强烈推荐的一个例子是:“
on=
在不同名称的列上进行合并时,它们必须使用
on=
这样的
x=y
格式,其中
x
来自“左侧”因为我们使用
i
查找
x
中的行,所以显示的列的名称来自
x
,值来自
i
:“在data.table中,形式为
x[i]的联接”
传统上使用
i
中的值,但使用
x
"@Jaap@Henrik. 感谢您指出将值保留在i中而名称保留在x中的默认工作方式,以及指向其他问题和github的链接。我不想问一个重复的,但真的没有遇到这些链接。应该更仔细地看。期待下一次更新,因为我对data.table的性能增益感兴趣
z <- y[x, on=.(c=a), .(a,c,d)];  z
#    a c  d
# 1: 1 1  2
# 2: 2 2 NA
z <- y[x, on=.(c=a), .(a,x.c,d)];  z
#    a x.c  d
# 1: 1   1  2
# 2: 2  NA NA