R中非等参与data.table的连接-反引号列名麻烦

时间:2018-08-15 09:46:22

标签: r data.table non-equi-join

当(反引号)列名称包含空格时,我无法对data.table进行非等联接。

我在工作时从我们的数据库中收集这样的名称,我们的显式策略是让每个人都使用这些相同的名称以避免混淆。我当然可以进行转换和重新转换,但我希望避免这种情况。

我想知道,这是data.table中的一个小故障,如果是的话,可以补救吗?还是我错过了什么?我对R很陌生,因此完全有可能...

可复制的示例:

以下方法有效:

a <- data.table(`test name1` = c('A', 'A', 'A', 'B', 'B'),
                 `test_name2` = c(1,2,3,3,4))

b <- data.table(`test_name3` = c(0,1,2),
                 `test name4` = c('A', 'A', 'B'),
                 V2 = c(1,2,3),
                 V3 = c('Low', 'Medium', 'High'))

a[b, on = .(`test name1` = `test name4`, `test_name2` > `test_name3`, `test_name2` <= V2)]

以下内容不:

a <- data.table(`test name1` = c('A', 'A', 'A', 'B', 'B'),
                 `test name2` = c(1,2,3,3,4))

b <- data.table(`test name3` = c(0,1,2),
                 `test name4` = c('A', 'A', 'B'),
                 V2 = c(1,2,3),
                 V3 = c('Low', 'Medium', 'High'))

a[b, on = .(`test name1` = `test name4`, `test name2` > `test name3`, `test name2` <= V2)]

错误消息是:

  

[.data.table(a,b,on =。(test name1 = test name4test name2>中的错误:     在x

中找不到列[test name2test name2]

sessionInfo():

R version 3.3.2 (2016-10-31)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

locale:
[1] LC_COLLATE=Norwegian (Bokmål)_Norway.1252  LC_CTYPE=Norwegian (Bokmål)_Norway.1252    LC_MONETARY=Norwegian (Bokmål)_Norway.1252
[4] LC_NUMERIC=C                               LC_TIME=Norwegian (Bokmål)_Norway.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] data.table_1.11.4

1 个答案:

答案 0 :(得分:1)

用字符串指定on=是另一种选择:

a[b, on = c("test name1==test name4", "test name2>test name3", "test name2<=V2")]

我认为只有在等号/不等号运算符周围没有空格并且使用==而不是=的情况下,此方法才有效。

我不确定是否有办法按照OP的代码编写on=,尽管看起来应该有。