#r #dataframe #count #missing-data
Вопрос:
У меня есть фрейм данных, который выглядит следующим образом
**Contig_A** **Contig_B**
Contig_0 Contig_1
Contig_3 Contig_5
Contig_4 Contig_1
Contig_9 Contig_0
Я хочу подсчитать, сколько идентификаторов contig (от Contig_0 до Contig_1193) отсутствует ни в одном столбце Contig_A Contig_B.
Например: если мы рассмотрим, что для этого фрейма данных всего 10 границ (от Contig_0 до Contig_9), то ответ будет 4 (Contig_2, Contig_6, Contig_7, Contig_8)
Ответ №1:
Создайте вектор всех значений, которые вы хотите проверить ( all_contig
), который находится Contig_0
Contig_10
здесь. Используется setdiff
для поиска отсутствующих значений и length
подсчета количества отсутствующих значений.
cols <- c('Contig_A', 'Contig_B')
#If there are lot of 'Contig' columns that you want to consider
#cols <- grep('Contig', names(df), value = TRUE)
all_contig <- paste0('Contig_', 0:10)
missing_contig <- setdiff(all_contig, unlist(df[cols]))
#[1] "Contig_2" "Contig_6" "Contig_7" "Contig_8" "Contig_10"
count_missing <- length(missing_contig)
#[1] 5
Ответ №2:
Автор: match
,
x <- c(0:9)
contigs <- sapply(x, function(t) paste0("Contig_",t))
df1 <- data.frame(
Contig_A = c("Contig_0", "Contig_3", "Contig_4", "Contig_9"),
Contig_B = c("Contig_1", "Contig_5", "Contig_1", "Contig_0")
)
xx <- c(df1$Contig_A,df1$Contig_B)
contigs[is.na(match(contigs, xx))]
[1] "Contig_2" "Contig_6" "Contig_7" "Contig_8"
В вашем случае просто измените x
, как x <- c(0,1193)