Subset the values with two number

Viewed 47

I want to subset the values with two numbers in a data frame, how do I code that?

id <- factor(rep(letters[1:2], each=5))
    A <- c(1,2,NA,67,8,9,0,6,7,9)
    B <- c(5,6,31,9,8,1,NA,9,7,4)
    C <- c(2,3,5,NA,NA,2,7,6,4,6)
    D <- c(6,5,89,3,2,9,NA,12,69,8)
    df <- data.frame(id, A, B,C,D) 
    df

It should look something

67,31,89,69
2 Answers

Using a for loop:

id <- factor(rep(letters[1:2], each=5))
A <- c(1,2,NA,67,8,9,0,6,7,9)
B <- c(5,6,31,9,8,1,NA,9,7,4)
C <- c(2,3,5,NA,NA,2,7,6,4,6)
D <- c(6,5,89,3,2,9,NA,12,69,8)
df <- data.frame(id, A, B,C,D) 
df

out <- c()
for(i in 1:ncol(df)){
  for(j in 1:nrow(df)){
    if(!is.na(df[j, i]) & nchar(as.character(df[j, i])) == 2){
      out <- c(out, df[j, i]) 
    }
  }
}
out
# [1] 67 31 89 12 69
tmp=unlist(subset(df,select=-c(id)))
tmp[nchar(tmp)==2 & !is.na(tmp)]

A4 B3 D3 D8 D9 
67 31 89 12 69 
Related