Learner
Learner

Reputation: 757

how to count the number of rows of specific column that has specific character

I have data that I want to know the number of specific rows that are with specific character. The data looks like the following

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)) 

I want to know how many rows of the column named "alt_df1" is missing or - or NA

Upvotes: 1

Views: 182

Answers (2)

NelsonGon
NelsonGon

Reputation: 13319

Here is an answer using which and utilising base R's LETTERS data:

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

Or using just which:

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

Upvotes: 2

Ronak Shah
Ronak Shah

Reputation: 388982

One way would be to create a logical vector using %in% and then sum over them to count the number of occurrences.

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

Or we can also subset and count the number of rows.

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

which can also be done in dplyr by

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

Another option using grepl

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

and I am sure there are multiple other ways.

Upvotes: 1

Related Questions