R data.table在一个字段上进行内部连接并在另一个字段上进行操作?

bro*_*oli 5 r data.table

我有以下场景,我首先创建一个数据表,如下所示

x = data.table(f1 = c('a','b','c','d'))
x = x[,rn := .I]
Run Code Online (Sandbox Code Playgroud)

这产生了

> x
   f1 rn
1:  a  1
2:  b  2
3:  c  3
4:  d  4
>
Run Code Online (Sandbox Code Playgroud)

其中rn只是行号.现在,我有另一个data.table y as

y = data.table(f2=c('b','c','f'))
Run Code Online (Sandbox Code Playgroud)

我希望能够做的是y中x的元素,我想从rn中的相应值中减去2.所以预期的data.table是

x
   f1 rn
1: a  1
2: b  0
3: c  1
4: d  4
Run Code Online (Sandbox Code Playgroud)

怎么会这样?x[y]y[x]不要在所有帮助,因为他们只是做连接.

Sim*_*lon 6

您可以使用%chin%in 按需要的行i进行子集x,然后运行j表达式...

x[ f1 %chin% y$f2 , rn := rn - 2L ]
x
#   f1 rn
#1:  a  1
#2:  b  0
#3:  c  1
#4:  d  4
Run Code Online (Sandbox Code Playgroud)

%chin%%in%运算符的快速版本,专门用于附带的字符向量data.table.请注意,2应该2L指定一个"integer"类型,否则你会收到警告(如果你正在处理"numeric"数据类型,显然不要使用它).


edd*_*ddi 5

如果您的数据是键控的,您可以使用如下连接:

setkey(x, f1)
x[y, rn := rn - 2L]
x
#   f1 rn
#1:  a  1
#2:  b  0
#3:  c  1
#4:  d  4
Run Code Online (Sandbox Code Playgroud)