У меня есть матрица с большим количеством столбцов (более 817 000) и 40 строк. Я хотел бы извлечь столбцы, которые содержат много 0 (например, > 30 или 35, независимо от числа).
Это должно выделить несколько столбцов, и я случайным образом выберу один, который буду использовать в качестве эталона для остальной части матрицы.
Есть идеи?
Редактировать :
OTU0001 OTU0004 OTU0014 OTU0016 OTU0017 OTU0027 OTU0029 OTU0030
Sample_10.rare 0 0 85 0 0 0 0 0
Sample_11.rare 0 42 169 0 42 127 0 85
Sample_12.rare 0 0 0 0 0 0 0 42
Sample_13.rare 762 550 2159 127 550 0 677 1397
Sample_14.rare 847 508 2751 169 1397 169 593 1990
Sample_15.rare 1143 593 3725 677 2116 466 212 2286
Sample_16.rare 5630 5291 5291 1270 3852 1185 296 2836
Он должен извлечь 4 столбца, OTU0001 OTU0016 OTU0027 OTU0029
потому что они получили по 3 нуля в каждом. И если это возможно, я хотел бы извлечь позицию извлеченных столбцов.
Итак, для вашего примера что-то вроде mat[,colSums(mat == 0) >= 3]
Вы можете сделать что-то вроде этого (где 7 - количество соответствующих нулей):
library(dplyr)
df <- tibble(Col1 = c(rep(0, 10), rep(1, 10)),
Col2 = c(rep(0,5), rep(1, 15)),
Col3 = c(rep(0,15), rep(1, 5)))
y <- df %>%
select_if (function(col) length(which(col==0)) > 7)
К вашему сведению, ОП говорит, что у них есть матрица, а не фрейм данных / таблица.
Вариант с base R
Filter(function(x) sum(x == 0) > 7, df)
Вы можете использовать
colSums(df == 0)
, чтобы узнать, сколько 0 записей, и просто отфильтровать. Вы пробовали что-нибудь? Можем ли мы увидеть попытку?