我无法在两个数据中进行基本的非等联接.R中没有错误的表:

显示错误的最小示例.

library(data.table)
set.seed(1); dt1 <- data.table(id= sample(letters[1:3],size = 10,replace = T),val = rnorm(10,mean = 5,sd = 2))
set.seed(2); dt2 <- data.table(id= sample(letters[1:3],size = 10,replace = T),val = rnorm(10,mean = 5,sd = 2))
dt1[dt2,on = .(id,abs(x.val - i.val) <1),nomatch=0]
#> Error in colnamesInt(x, names(on), check_dups = FALSE): argument specifying columns specify non existing column(s): cols[2]='abs(x.val - i.val)'

reprex package(v2.0.1)于2022年5月17日创建

这一定是我错过的最基本的东西.

Note: I have deliberately kept column names identical in both data tables to test the x. and i. functionality of data.table.

推荐答案

在两个步骤中,as on仅接受=<>:

dt1[dt2,on = .(id),nomatch=0,allow.cartesian=T][abs(val - i.val)<1]

   id      val    i.val
1:  a 3.142866 3.175512
2:  b 4.421077 3.494669
3:  b 4.401570 3.494669
4:  a 4.988466 4.428577
5:  a 3.142866 2.931430
6:  a 4.988466 4.943710
7:  a 4.988466 4.267357
8:  a 3.142866 2.769503

或者为了避免笛卡尔积:

dt2[,`:=`(val_min=val-1,val_max=val+1)]
dt1[dt2,.(id,x.val,i.val),on = .(id,val>val_min,val<val_max),nomatch=0]

   id    x.val    i.val
1:  a 3.142866 3.175512
2:  b 4.421077 3.494669
3:  b 4.401570 3.494669
4:  a 4.988466 4.428577
5:  a 3.142866 2.931430
6:  a 4.988466 4.943710
7:  a 4.988466 4.267357
8:  a 3.142866 2.769503

R相关问答推荐

在发布到PowerBI Service时,是否可以使用R脚本作为PowerBI的数据源?

基于多列将值链接到NA

用值序列对行进行子集化,并标识序列开始的列

制作等距离的线串副本

多个过滤器内的一个盒子在仪表板Quarto

将数字转换为分钟和秒

从所有项的 struct 相同的两级列表中,将该第二级中的所有同名项绑定在一起

使用RSelenium在R中抓取Reddit时捕获多个标签

在R中创建连续的期间

R中Gamma回归模型均方误差的两种计算方法不一致

使用来自嵌套列和非嵌套列的输入的PURRR:MAP和dplyr::Mariate

在ggplot2上从多个数据框创建复杂的自定义图形

是否可以将线性模型的p值添加到tbl_summary中

将文本批注减少到gglot的y轴上的单个值

如何根据其他列中的两个条件来计算数据帧中的行之间的差异?

R中的Desolve:返回的导数数错误

R没有按顺序显示我的有序系数?

在分面的ggplot2条形图中对条形图进行排序,并省略每组未使用的系数级别

R:部分修改矩阵对角线的有效方法

用从先前非NA值开始的递增序列替换NA值