我有以下情况,我首先创建一个数据表,如下所示
x = data.table(f1 = c('a','b','c','d'))
x = x[,rn := .I]
这产生
> x
f1 rn
1: a 1
2: b 2
3: c 3
4: d 4
>
其中rn只是行号。现在,我有另一个data.table y作为
y = data.table(f2=c('b','c','f'))
我想对x中的y中的元素执行操作,我想从rn中的对应值中减去2。所以预期的data.table是
x
f1 rn
1: a 1
2: b 0
3: c 1
4: d 4
如何做到这一点?
x[y]
和y[x]
完全没有帮助,因为它们只是联接。 最佳答案
您可以使用%chin%
中的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
%chin%
是%in%
运算符的快速版本,专门用于data.table
随附的字符向量。请注意,2
应该为2L
以指定"integer"
类型,否则您将收到警告(如果要处理"numeric"
数据类型,显然不要使用此警告)。关于R data.table在一个字段上进行内部联接并在另一个字段上进行操作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19848710/