我有以下场景,我首先创建一个数据表,如下所示
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]不要在所有帮助,因为他们只是做连接.
您可以使用%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"数据类型,显然不要使用它).
如果您的数据是键控的,您可以使用如下连接:
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)
| 归档时间: |
|
| 查看次数: |
244 次 |
| 最近记录: |