在r中的data.table中使用lapply中的函数

Rok*_*050 5 r lapply data.table

如果有如下样本数据集.

> tmp <- data.table(x=c(1:10),y=(5:14))
> tmp
     x  y
 1:  1  5
 2:  2  6
 3:  3  7
 4:  4  8
 5:  5  9
 6:  6 10
 7:  7 11
 8:  8 12
 9:  9 13
10: 10 14
Run Code Online (Sandbox Code Playgroud)

我想选择两个最小的数字,我想要将0值更改为其他数字.

喜欢

   x y
 1: 1 5
 2: 2 6
 3: 0 0
 4: 0 0
 5: 0 0
 6: 0 0
 7: 0 0
 8: 0 0
 9: 0 0
10: 0 0
Run Code Online (Sandbox Code Playgroud)

我认为编码是

tmp[, c("x","y"):=lapply(.SD, x[which(!x %in% sort(x)[1:2])] = 0}), .SDcols=c("x","y")]
Run Code Online (Sandbox Code Playgroud)

但它改变了所有0

我怎么解决这个问题.

akr*_*run 0

也许你可以尝试

tmp[, lapply(.SD, function(x) replace(x,
             !rank(x, ties.method='first') %in% 1:2, 0))]
#   x y
#1: 1 5
#2: 2 6
#3: 0 0
#4: 0 0
#5: 0 0
#6: 0 0
#7: 0 0
#8: 0 0
#9: 0 0
#10:0 0
Run Code Online (Sandbox Code Playgroud)