我有一个data.table:
我希望删除所有F1-F7列中任意一个值大于10的行。
> dat
Mutant F1 F2 F3 F4 F5 F6 F7
1: A115D 6.53193 7.19020 8.45634 8.49147 9.28304 16.83618 10.70517
2: A115F 0.90377 4.33477 5.71287 6.63125 5.86933 9.41705 14.59203
3: A115G 3.26668 4.46146 5.42433 7.80924 8.52429 10.92138 11.27432
4: A115H 2.91278 5.09545 6.01828 8.18154 8.11368 11.98551 11.33009
5: A115I 9.35627 9.29640 9.78475 10.76222 12.80510 16.13456 16.51090
---
313: Y80R -1.19326 -2.05579 -1.16474 1.74387 4.79593 5.59487 11.35956
314: Y80S -0.77282 -1.51611 -0.07168 3.16070 3.16795 7.73116 11.60527
315: Y80T -0.16135 -0.05859 2.02493 3.28120 6.10268 11.71562 12.45665
316: Y80V -0.24050 -0.59869 0.36746 3.07046 3.75905 9.17579 11.83179
317: Y80W 0.77770 -0.10166 2.27790 6.11470 6.01080 9.47050 13.95344
我希望删除所有F1-F7列中任意一个值大于10的行。
阅读文档,我已经了解到:
> dat[, .SD > 10, .SDcols=2:7]
虽然我不确定我在这里做的事情是否有意义。无论如何,这样做可以得到类似以下的结果:
> dat[, .SD>10, .SDcols=2:7]
F1 F2 F3 F4 F5 F6 F7
[1,] FALSE FALSE FALSE FALSE FALSE TRUE TRUE
[2,] FALSE FALSE FALSE FALSE FALSE FALSE TRUE
[3,] FALSE FALSE FALSE FALSE FALSE TRUE TRUE
[4,] FALSE FALSE FALSE FALSE FALSE TRUE TRUE
[5,] FALSE FALSE FALSE TRUE TRUE TRUE TRUE
[6,] FALSE FALSE FALSE FALSE TRUE TRUE TRUE
现在,我想过滤掉所有包含TRUE
的行。
dat[rowSums(dat[, .SD>10, .SDcols=2:7])==0]
。或者,对于更符合惯用法的data.table
,请尝试dat[!(Reduce("|",dat[,lapply(.SD,function(x) x>10),.SDcols=2:7]))]
。 - nicola10
不是实际使用的过滤器值。 - TMOTTMReduce
,那该怎么做呢? - TMOTTM