【发布时间】:2016-04-06 21:05:02
【问题描述】:
我有一个 data.table:
> 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 的所有行。
【问题讨论】:
-
如果您正在处理数据,您可能需要一个矩阵,而不是 data.table。
-
从你的最后一点开始,试试
dat[rowSums(dat[, .SD>10, .SDcols=2:7])==0]。或者,对于更惯用的data.table,请尝试dat[!(Reduce("|",dat[,lapply(.SD,function(x) x>10),.SDcols=2:7]))]。 -
所以在您的示例数据中不会保留任何行,一个空数据表?
-
@RichardScriven 值比较多,
10并不是实际使用的过滤值。 -
不知道
Reduce怎么办?
标签: r data.table