У меня есть матричный файл
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. Но я не думаю, что суммы строк будут работать в этом случае.
Для исключения строк, где все (числовые) значения столбцов - меньше чем 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
>