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

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/

10-12 14:02