Как удалить строку, когда все столбцы меньше одного

У меня есть матричный файл

a  0.34  3.03  1.92
b  1.35  1.34  0.63
c  0.66  2.32  1.01
d  0.23  2.07  0.22
e  0.34  0.47  0.55

Я должен удалить строки, в которых все значения его столбца меньше 1.

Ожидаемый выходной файл:

a  0.34  3.03  1.92
b  1.35  1.34  0.63
c  0.66  2.32  1.01
d  0.23  2.07  0.22

Я получил эту ссылку, где они удаляют строки, когда все столбцы меньше нуля https://stackoverflow.com/questions/20592611/how-to- delete-row-where-all-the-columns-are-zero , где они используют строки в R. Но я не думаю, что суммы строк будут работать в этом случае.

0
задан 12 July 2019 в 10:18

1 ответ

Для исключения строк, где все (числовые) значения столбцов - меньше чем 1 распечатайте тех, для которых по крайней мере один столбец имеет значение, больше, чем или равный одному:

$ awk '{for(i=2;i<=NF;i++) if($i >= 1){print; next}}' file
a  0.34  3.03  1.92
b  1.35  1.34  0.63
c  0.66  2.32  1.01
d  0.23  2.07  0.22

или

perl -alne 'shift @F; print if grep { $_ >= 1 } @F' file

или (более выразительно, с помощью any из Списка:: модуль Util)

perl -MList::Util=any -alne 'shift @F; print if any { $_ >= 1 } @F' file

Ваша предложенная команда R (отправленный в комментариях) была близка: это перестало работать, я думаю, потому что Вы не исключили первый (нечисловой) столбец напр.

> dat = read.table("file")
>
> dat
  V1   V2   V3   V4
1  a 0.34 3.03 1.92
2  b 1.35 1.34 0.63
3  c 0.66 2.32 1.01
4  d 0.23 2.07 0.22
5  e 0.34 0.47 0.55
>
> dat[!apply(dat, 1, function(x) all(x < 1)), ]
  V1   V2   V3   V4
1  a 0.34 3.03 1.92
2  b 1.35 1.34 0.63
3  c 0.66 2.32 1.01
4  d 0.23 2.07 0.22
5  e 0.34 0.47 0.55
>

но

> dat[!apply(dat[,-1], 1, function(x) all(x < 1)), ]
  V1   V2   V3   V4
1  a 0.34 3.03 1.92
2  b 1.35 1.34 0.63
3  c 0.66 2.32 1.01
4  d 0.23 2.07 0.22
>
1
ответ дан 24 October 2019 в 00:08

Другие вопросы по тегам:

Похожие вопросы: