Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么或不在dplyr中工作_R_Dplyr - Fatal编程技术网

为什么或不在dplyr中工作

为什么或不在dplyr中工作,r,dplyr,R,Dplyr,我在使用dplyr时遇到过这种问题 还有这个 df <- df %>% mutate(LEV_6 = ifelse(is.na(H91), 0, 1), LEV_31 = ifelse(is.na(D15) | LD15 == 1, 0, 1)) 但是我得到了NAs而不是1s问题是R如何在|语句中处理NA:TRUE | NA将返回TRUE,因为,无论其他部分是什么,如果不是NA,它都将以TRUE结束,而对于NA | FALSE,它完全取决于什么可以代替NA,因此我们无法知道,因此R

我在使用dplyr时遇到过这种问题

还有这个

df <- df %>% mutate(LEV_6 = ifelse(is.na(H91), 0, 1), LEV_31 = ifelse(is.na(D15) | LD15 == 1, 0, 1))

但是我得到了NAs而不是1s

问题是R如何在|语句中处理NA:TRUE | NA将返回TRUE,因为,无论其他部分是什么,如果不是NA,它都将以TRUE结束,而对于NA | FALSE,它完全取决于什么可以代替NA,因此我们无法知道,因此R将NA作为输出

如果is.naD15 | LD15==1,则需要0,否则需要1,换句话说,由于LD15是1或NA,当D15不是NA,LD15是NA时需要1,可以这样翻译:

df$LEV_31 <- with(df, as.integer(!is.na(D15) & is.na(LD15)))
正如@davidernburg在评论中提到的,如果LD15的价值大于NA或1,那么您可以:

with(df, as.integer(!(is.na(D15) | (!is.na(LD15) & (LD15 == 1)))))

问题是R如何在|语句中处理NA:TRUE | NA将返回TRUE,因为,无论其他部分是什么,如果不是NA,它都将以TRUE结束,而对于NA | FALSE,它完全取决于什么可以代替NA,因此我们无法知道,因此R将NA作为输出

如果is.naD15 | LD15==1,则需要0,否则需要1,换句话说,由于LD15是1或NA,当D15不是NA,LD15是NA时需要1,可以这样翻译:

df$LEV_31 <- with(df, as.integer(!is.na(D15) & is.na(LD15)))
正如@davidernburg在评论中提到的,如果LD15的价值大于NA或1,那么您可以:

with(df, as.integer(!(is.na(D15) | (!is.na(LD15) & (LD15 == 1)))))

因为NA==1返回NA?我希望您知道,对于这样的基本任务,您既不需要ifelse也不需要dplyr。厌倦了,不明白您在LD15中有NAs,因此当您将它们与1进行比较时,您得到的是NAs,那么您正在执行is.naD15 | NA,如果is.naD15==FALSE,这将变为FALSE | NA-这将返回NA。因此,对于is.naD15==FALSE和LD15==NA的情况,您得到的是作为回报的NAs。LD15中是否始终有NA或1,或者其他值也是可能的?那么我猜Caths解决方案会这样做,因为NA==1返回NA?我希望您知道,对于这样的基本任务,您既不需要ifelse也不需要dplyr。厌倦了,不明白您在LD15中有NAs,因此当您将它们与1进行比较时,您得到的是NAs,那么您正在执行is.naD15 | NA,如果is.naD15==FALSE,这将变为FALSE | NA-这将返回NA。因此,对于is.naD15==FALSE和LD15==NA的情况,您得到的是NAs作为回报。LD15中是否始终有NA或1或其他值也是可能的?那么我猜Caths解决方案可以解决问题,这是一个重复的问题吗?还是愚蠢的一个?@Mateusz1981有一些类似的问题,但我不确定是否有确切的重复,但我没有寻找。。。当然,这并不愚蠢,逻辑问题与R行为相结合可以被扭曲-没问题,这是一个重复的问题吗?还是愚蠢的一个?@Mateusz1981有一些类似的问题,但我不确定是否有确切的重复,但我没有寻找。。。当然,这并不愚蠢,逻辑问题与R行为相结合可以被扭曲-
with(df, as.integer(!(is.na(D15) | (!is.na(LD15) & (LD15 == 1)))))