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