R语言 ia.na 并且在IF语句中为.null

waxmsbnn  于 2023-03-05  发布在  其他
关注(0)|答案(1)|浏览(136)

我有下面的数据,在某些情况下只有最后一列,我尝试在这个条件下写一个IF语句。当列没有出现或列有一个NA值时,我希望它返回TRUE。如下面的例子所示,它在1位置工作。但是在位置2返回逻辑(0)。有人知道这是为什么吗?我怎么也能让语句在位置2读TRUE或FALSE?
示例数据

df
[[1]]
      Score  didbreak   break
1        6    FALSE     <NA>
2        6    FALSE      9
3        5    FALSE     <NA>

[[2]]
      Score  didbreak   
1        3    FALSE     
2        4    FALSE      

[[3]]
      Score  didbreak   
1        9    FALSE     
2        8    FALSE      
3        8    FALSE

使用if语句(部分是个问题)

if(nrow(df[[xx]])==3 & !is.na(df[[xx]]$Score[3]) & (is.na(df[[xx]]$break[3]) | is.null(df[[xx]]$break[3]))) { }

这对于顶部位置1是有效的,因为在数据的第3行有一个NA值,但是在位置2,它返回逻辑(0),因为没有中断列。
(忽略breif名称等,我在这里编辑了它)

velaa5lx

velaa5lx1#

在注解中@Konrad Rudolph之后,您可能希望使用&&/||而不是&/|(两者有什么区别||以及|在R中)。

lapply(example,
       \(df) { if (nrow(df) == 3 && !is.na(df$Score[3]) && (is.na(df$break1[3]) || is.null(df$break1[3]))) "Conditions satisfied" }
)

输出:

[[1]]
[1] "Conditions satisfied"

[[2]]
NULL

[[3]]
[1] "Conditions satisfied"

数据:

example <- list(data.frame(Score = c(6, 6, 5), didbreak = c(F, F, F), break1 = c(NA, 9, NA)),
                data.frame(Score = c(3, 4), didbreak = c(F, F)),
                data.frame(Score = c(9, 8, 8), didbreak = c(F, F, F)))

为了避免与break()混淆,我使用break1作为名称。

相关问题