R 省略NA值的条件搜索

R 省略NA值的条件搜索,r,subset,conditional-statements,R,Subset,Conditional Statements,我正在对数据集的一部分进行条件搜索,该数据集的每一行中有多个NA值 像这样的东西(预览) 我想做一些条件搜索,为每一行应用一个条件(比较一行中的一列是否大于另一列)。我想找到变量列(如time1)小于相应列(如slice 1)的所有行(pt) all.smallerslice1&time2>slice2&time3>slice3&time4>slice4,na.rm=TRUE,select=c(1)) 当我使用这段代码(在这种格式的更大的扩展表上)时,它只返回不带任何NAs的行,所有值都添加到

我正在对数据集的一部分进行条件搜索,该数据集的每一行中有多个NA值

像这样的东西(预览)

我想做一些条件搜索,为每一行应用一个条件(比较一行中的一列是否大于另一列)。我想找到变量列(如time1)小于相应列(如slice 1)的所有行(pt)

all.smallerslice1&time2>slice2&time3>slice3&time4>slice4,na.rm=TRUE,select=c(1))
当我使用这段代码(在这种格式的更大的扩展表上)时,它只返回不带任何NAs的行,所有值都添加到了这些行中。考虑到“&”的使用,这是有道理的

我的问题是:有没有一种方法可以找到哪些行适合我的条件搜索,忽略NA,但只返回行,在提供值的所有列变量中,它搜索time1>slice1、time2>slice2等


感谢您的帮助。谢谢

您可以创建一个函数,该函数接受一个布尔值(可能是
NA
),并将其映射到
TRUE
,如果它是
NA
,则将其值映射到其他值

na.true <- function(x) ifelse(is.na(x), TRUE, x)
你可以试试这个

n=1:4
cond <- paste0('((is.na(time',n,')|is.na(slice',n,'))|(time',n,'>slice',n,'))')
conds <- paste(cond, collapse=' & ')
all.smaller <- subset( patientdata, eval(parse(text=conds)) )
n=1:4

cond运行此命令后,我得到一个“is.na(patientdata,TRUE,patientdata)中的错误:3个参数传递给'is.na',需要1”。'代码'all.smallerslice1)&na.true(time2>slice2)&na.true(time3>slice3)&na.true(time4>slice4),select=c(1))你知道我可能做错了什么吗?事实上,我意识到我做错了什么-我应该照原样复制代码的第一部分(我把x误认为是数据帧)。谢谢你的帮助!
na.true <- function(x) ifelse(is.na(x), TRUE, x)
na.true(time1 > slice1) & na.true(time2 > slice2) & na.true(time3 > slice3) & na.true(time4 > slice4)
n=1:4
cond <- paste0('((is.na(time',n,')|is.na(slice',n,'))|(time',n,'>slice',n,'))')
conds <- paste(cond, collapse=' & ')
all.smaller <- subset( patientdata, eval(parse(text=conds)) )