R 将值子集为两个数字

R 将值子集为两个数字,r,R,我想在一个数据帧中用两个数字对值进行子集,我该如何编码 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

我想在一个数据帧中用两个数字对值进行子集,我该如何编码

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
使用for循环:

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

id我会选择@user2974951的答案,但是暴力方法
c(df$A[哪个(df$A>9&df$A<100)],df$B[哪个(df$B>9&df$B<100)],df$c[哪个(df$c>9&df$c<100)],df$d[哪个(df$d>9&df$d<100)])
@markhogue我没有选择这种方法,因为我不确定两个数字是只代表整数还是小数。是的,你说得对。在那种情况下,我的方法将失败
tmp=unlist(subset(df,select=-c(id)))
tmp[nchar(tmp)==2 & !is.na(tmp)]

A4 B3 D3 D8 D9 
67 31 89 12 69 
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