Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 不等于data.table联接中的条件_R_Join_Data.table - Fatal编程技术网

R 不等于data.table联接中的条件

R 不等于data.table联接中的条件,r,join,data.table,R,Join,Data.table,问题 我正在尝试连接两个表,有几个条件。我想添加一个不等于的条件 我尝试的 我试着使用=但是什么都不管用,你知道怎么做吗 示例 A <- data.table(c("a","a","b","c","d"),c(1,2,3,4,5),c("aa","ab","aa","cd","aa")) B <- data.table(c("a","a","b","c","d"),c(1,1,5,4,7),c("aa","ab","aa","cd","aa"),c("yes","yes","no",

问题

我正在尝试连接两个表,有几个条件。我想添加一个不等于的条件

我尝试的

我试着使用
=但是什么都不管用,你知道怎么做吗

示例

A <- data.table(c("a","a","b","c","d"),c(1,2,3,4,5),c("aa","ab","aa","cd","aa"))
B <- data.table(c("a","a","b","c","d"),c(1,1,5,4,7),c("aa","ab","aa","cd","aa"),c("yes","yes","no","yes","no"))

Jdt <- A[B,on= .(V1,V2,A.V3 != i.V3), `:=`(V4 = i.V4)][is.na(V4), V4 :=0][]
编辑2

我正在尝试这样做:

A[B,on=c("V1","V3"),`:=`(V42 = i.V4)][V2==i.V2,V4:="0"][,i.V2:=NULL][]
我想在连接过程中重命名列,但出现以下错误:

Error in eval(expr, envir, enclos) : object 'i.V2' not found
这是我想要的输出

   V1 V2 V3  V42
1:  a  1 aa   0
2:  a  2 ab yes
3:  b  3 aa  no
4:  c  4 cd   0
5:  d  5 aa  no

看起来您实际上是在加入
V1
V3
并检查
V2
上的条件。试试这个:

A[B,on=c("V1","V3")][V2==i.V2,V4:="0"][,i.V2:=NULL][]
#   V1 V2 V3  V4
#1:  a  1 aa   0
#2:  a  2 ab yes
#3:  b  3 aa  no
#4:  c  4 cd   0
#5:  d  5 aa  no

你至少应该描述一下你想要的输出。我不太清楚您的最终目标,但您可以只在
V1、V2
上加入A和B,然后选择
V3
i.V3
不同的行。类似于
A[B,on=c(“V1”、“V2”)][V3!=i.V3]
的内容。不等于联接(
!=
)的可能性尚未实现,请参见GitHub。@nicola我编辑了我的问题,添加了所需的输出。对此很抱歉。@Jaap我发现了
数据表的性能,我希望使用自然语法(无链接)创建置换(无替换)。我们有这个功能的预计到达时间吗?I’’我认为,与其制作一个新表,不如就地修改一个表guess@Frank我认为它可以像
A@OrhanYazar所说的“就地”,我的意思是“通过引用”。如果您不熟悉该功能,那么在第一批软件包vignettes@nicola I遇到了一个问题。我试着这样做:
A[B,on=c(“V1”,“V3”),':='(V42=I.V4)][V2==I.V2,V4:=“0”][,I.V2:=NULL][
但是我在eval(expr,envir,enclose)中得到
错误:找不到对象“I.item”
A[B,on=c("V1","V3")][V2==i.V2,V4:="0"][,i.V2:=NULL][]
#   V1 V2 V3  V4
#1:  a  1 aa   0
#2:  a  2 ab yes
#3:  b  3 aa  no
#4:  c  4 cd   0
#5:  d  5 aa  no