我有一個大資料框,我試圖在其中找出 NA 值
| q3 | 次_30 |
|---|---|
| 好簡單 | 18/11/2021 |
| 簡單 | 01/01/2021 |
| 不適用 | 未到期 |
| 不適用 | 沒有答案 |
| 不適用 | 01/02/2021 |
我在用
df$q3<-ifelse (is.na(df$q3), df$times_30,df$q3)
哪里給我
| q3 | 次_30 |
|---|---|
| 好簡單 | 18/11/2021 |
| 簡單 | 01/01/2021 |
| 未到期 | 未到期 |
| 沒有答案 | 沒有答案 |
| 01/02/2021 | 01/02/2021 |
但我想而不是用 q3 的 NA 處的日期替換給我一個“沒有答案”,如下所示
| q3 | 次_30 |
|---|---|
| 好簡單 | 18/11/2021 |
| 簡單 | 01/01/2021 |
| 未到期 | 未到期 |
| 沒有答案 | 沒有答案 |
| 沒有答案 | 01/02/2021 |
uj5u.com熱心網友回復:
您可以嘗試使用 dplyr::case_when
library(dplyr)
df %>%
mutate(q3 = case_when(
is.na(q3) & times_30 == "Not due" ~ times_30,
is.na(q3) ~ "No answer",
TRUE ~ q3
))
q3 times_30
1 Very easy 18/11/2021
2 Easy 01/01/2021
3 Not due Not due
4 No answer No answer
5 No answer 01/02/2021
uj5u.com熱心網友回復:
你非常接近。我們可以使用第二個 ifelse 陳述句來做到這一點。
df <- data.frame(q3 = c("Very easy", "Easy", NA, NA, NA),
times_30 = c("18/11/2021", "01/01/2021", "Not due", "No answer", "01/01/2021"))
df$q3 <- ifelse(is.na(df$q3),
ifelse(!df$times_30 %in% c("No answer", "Not due"),
"No answer", df$times),
df$q3)
#> q3 times_30
#> 1 Very easy 18/11/2021
#> 2 Easy 01/01/2021
#> 3 Not due Not due
#> 4 No answer No answer
#> 5 No answer 01/01/2021
或者,匹配 中的一個數字times_30,并且使用transform不必鍵入df$這么多次:
df <- df |>
transform(q3 = ifelse(is.na(q3),
ifelse(grepl("\\d", times_30), "No answer", times_30),
q3))
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/369982.html
