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
我怎么解决这个问题.
也许你可以尝试
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)