【发布时间】:2021-12-22 06:20:00
【问题描述】:
我在使用下面的代码时遇到问题,我不确定它为什么不起作用。
| Q16a | Q16c | Q17 |
|---|---|---|
| 2 | NA | 31 |
| 2 | NA | 28 |
| 1 | 26 | NA |
| 1 | 29 | NA |
| 1 | 32 | NA |
| 1 | 25 | NA |
| 1 | 25 | NA |
Ech_final_nom_BSA <- Ech_final_nom_BSA %>%
mutate(Moins_23_eleves = ifelse(Q16a==1,
ifelse(!is.na(Q16c),ifelse(Q16c<=22,1,0),
NA),
ifelse(!is.na(Q17),ifelse(Q17<=22,1,0),NA
)))
因此,当 Q17 或 Q16c 低于 23 但我不希望时,我希望变量 Moins_23_eleves 等于 1 NA 值等于 0。上面的代码有效,但仍将 NA 视为 0。
table(Ech_final_nom_BSA$Moins_23_eleves, useNA = "always")
| 0 | 1 | NA |
|---|---|---|
| 1076 | 597 | 0 |
我做错了什么?
谢谢!
【问题讨论】:
-
您给了我们预期的输出,但没有给我们输入。这让生活变得艰难......
-
感谢您的回答。我已经更新了问题。
-
说实话,我不太明白你的问题。如果我们在您提供的数据上运行您的第一段代码,我们会得到一个仅包含零的列
Moins_23_eleves(这是合乎逻辑的,因为在列Q16c和Q17中没有小于 23 的值,并且存在总是在任一列中的值)。如果该列仅包含零,则意味着它不包含NA。那么,为什么你会期望table()函数生成的dataframe的NA 列的值不是0? -
您好,是的,我明白您的意思。也有 Q16c 和 Q17 都是 NA 的情况。在这种情况下,我希望它们保持 NA 而不是变成 0。
-
好的。感谢您的澄清。在这种情况下,请使用库
data.table找到可能的解决方案(参见下面的答案)。干杯。
标签: r if-statement dplyr