R 如何同时检查NAs和平等性

R 如何同时检查NAs和平等性,r,R,我有两列数据框,看起来像这样 1 NA NA 2 2 5 3 NA NA NA 如何返回两个值都小于3或为NA的行?输出如下所示: 1 NA NA 2 NA NA 一个选项是将替换NA为预期值,在逻辑矩阵上执行行和,并将其转换为用于子集行的逻辑向量 df1[rowSums(replace(df1, is.na(df1), 2) < 3) == 2,] # v1 v2 #1 1 NA #2 NA 2 #5 N

我有两列数据框,看起来像这样

   1   NA
   NA  2
   2   5 
   3   NA
   NA  NA
如何返回两个值都小于3或为NA的行?输出如下所示:

   1   NA
   NA  2
   NA  NA

一个选项是将
替换
NA
为预期值,在逻辑矩阵上执行
行和
,并将其转换为用于子集行的逻辑向量

df1[rowSums(replace(df1, is.na(df1), 2) < 3) == 2,]
#  v1 v2
#1  1 NA
#2 NA  2
#5 NA NA
df1[行和(替换(df1,is.na(df1),2)<3)==2,]
#v1 v2
#11NA
#2 NA 2
#5纳纳
数据
df1可能比它应该的更复杂,但可以工作:

a = c(1, NA, 2, 3, NA)
b = c(NA, 2, 5, NA, NA)

list.ab = as.data.frame(list(a = a, b = b))

list.rows = c()
for (x in 1:nrow(list.ab)) {
  row = list.ab[x, ]
  nas = sum(is.na(row))
  lowerthan3 = sum(row < 3, na.rm = T)
  total.conds = nas + lowerthan3
  if (total.conds == 2) {
    list.rows = c(list.rows, x)
  }
}

print(list.ab[list.rows, ])

   a  b
1  1 NA
2 NA  2
5 NA NA
a=c(1,不适用,2,3,不适用)
b=c(NA,2,5,NA,NA)
list.ab=as.data.frame(list(a=a,b=b))
list.rows=c()
对于(x/1:nrow(list.ab)){
行=list.ab[x,]
nas=总和(is.na(行))
lowerthan3=总和(第3行,na.rm=T)
total.conds=nas+较低级别3
如果(total.conds==2){
list.rows=c(list.rows,x)
}
}
打印(list.ab[list.rows,])
a b
11NA
2 NA 2
5纳纳

您可以使用
应用
,然后测试是否全部都是
NA
或全部都是
,我想我尝试执行的逻辑是检查NAs并在多个列的阈值之下,所以我认为这不起作用。@backproductiveola您可以尝试更新后的代码吗?相同的想法:
df1[rowMeans](df1<3,na.rm=T)==1,]
您可以将函数替换为
all(y<3,na.rm=TRUE)
@kath-Oh-yes。谢谢。
a = c(1, NA, 2, 3, NA)
b = c(NA, 2, 5, NA, NA)

list.ab = as.data.frame(list(a = a, b = b))

list.rows = c()
for (x in 1:nrow(list.ab)) {
  row = list.ab[x, ]
  nas = sum(is.na(row))
  lowerthan3 = sum(row < 3, na.rm = T)
  total.conds = nas + lowerthan3
  if (total.conds == 2) {
    list.rows = c(list.rows, x)
  }
}

print(list.ab[list.rows, ])

   a  b
1  1 NA
2 NA  2
5 NA NA
x <- read.table(text="1   NA
   NA  2
   2   5 
   3   NA
   NA  NA")

x[apply(x, 1, function(y) {all(is.na(y)) || all(y[!is.na(y)]<3)}),]
#  V1 V2
#1  1 NA
#2 NA  2
#5 NA NA
x[apply(x, 1, function(y) {all(y < 3, na.rm = TRUE)}),]
x[apply(x, 1, function(y) {all(y[!is.na(y)] < 3)}),]