如何计算具有特定字符的特定列的行数

时间:2019-03-25 02:22:30

标签: r

我有一些数据,我想知道具有特定字符的特定行的数量。数据如下所示

df<-structure(list(Gene.refGene = structure(c(1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 4L, 4L, 4L, 4L, 4L), .Label = c("A1BG", "A1BG-AS1", "A1CF", 
"A1CF;PRKG1"), class = "factor"), Chr = structure(c(2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("chr10", "chr19"
), class = "factor"), Start = c(58858232L, 58858615L, 58858676L, 
58859052L, 58859055L, 58859066L, 58859510L, 58863162L, 58864479L, 
58864150L, 58864867L, 58864879L, 58865857L, 52566433L, 52569637L, 
52571047L, 52573510L, 52576068L, 52580561L, 52603659L, 52619845L, 
52625849L, 52642500L, 52650951L, 52675605L, 52703952L, 52723140L, 
52723638L), End = c(58858232L, 58858615L, 58858676L, 58859052L, 
58859055L, 58859066L, 58859510L, 58863166L, 58864479L, 58864150L, 
58864867L, 58864879L, 58865857L, 52566433L, 52569637L, 52571047L, 
52573510L, 52576068L, 52580561L, 52603659L, 52619845L, 52625849L, 
52642500L, 52650958L, 52675605L, 52703952L, 52723140L, 52723638L
), Ref = structure(c(3L, 5L, 2L, 2L, 3L, 2L, 5L, 7L, 6L, 6L, 
2L, 1L, 5L, 6L, 5L, 3L, 2L, 5L, 6L, 3L, 3L, 6L, 3L, 4L, 3L, 6L, 
6L, 3L), .Label = c("-", "A", "C", "CTCTCTCT", "G", "T", "TTTTT"
), class = "factor"), Alt_df1 = structure(c(1L, 1L, 4L, 4L, 1L, 
4L, 5L, 1L, 3L, 3L, 4L, 4L, 3L, 1L, 2L, 5L, 1L, 2L, 1L, 5L, 5L, 
2L, 5L, 1L, 4L, 3L, 4L, 2L), .Label = c("-", "A", "C", "G", "T"
), class = "factor")), class = "data.frame", row.names = c(NA, 
-28L)) 

我想知道名为“ alt_df1”的列中缺少多少行或-或NA

2 个答案:

答案 0 :(得分:2)

以下是使用which并使用base R的LETTERS数据的答案:

length(which(!df$Alt_df1%in%LETTERS))
 #[1] 8

或者仅使用which

length(which(df$Alt_df1=="-"))
  #[1] 8

答案 1 :(得分:1)

一种方法是使用%in%创建一个逻辑向量,然后在它们之上sum来计算出现的次数。

sum(df$Alt_df1 %in% c("-", NA))
#[1] 8

或者我们也可以subset并计算行数。

nrow(subset(df, Alt_df1 %in% c("-", NA)))

也可以在dplyr中完成

library(dplyr)
df %>% filter(Alt_df1 %in% c("-", NA)) %>% nrow

另一个使用grepl

的选项
with(df, sum(grepl("-", Alt_df1)) + sum(is.na(Alt_df1)))

我相信还有其他多种方法。