你好我有這個代碼
df <- df %>%
mutate(prev_PC = ifelse(changed_PC == "No" & (is.na(prev_PC) | prev_PC == ""), new_PC, prev_PC))
我正在嘗試更改以前的郵政編碼。假設我們有舊的郵政編碼,我們有新的郵政編碼。
舊郵政編碼來自一個較小的資料集,該資料集與具有新郵政編碼的較大資料集重疊。在與舊郵政編碼相同的資料集中,我們有一個變數,如果人們更改了他們的郵政編碼,則表示“否”或“是”(關于舊郵政編碼的問卷調查在新郵政編碼的問卷調查之后提出)。
如果他們沒有更改郵政編碼,我想使用此變數用新郵政編碼填充舊郵政編碼。但是,由于 changed_PC 變數中有大約 1000 個 NA 值,因此在這些情況下,它會用 NA 填充 prev_PC,并且我在 prev_PC 中留下的 NA 比以前更多。我怎樣才能改變這個?
TL;DR:我希望 changed_PC == "No" if 陳述句忽略 NA。因此,如果 changed_PC == NA,我只希望它保留 prev_PC 中的值,就好像它說“是”而不是將 prev_PC 變成 NA。
這是一個例子:
prev_PC <- c(5039, 1402, 3050, NA, NA, NA, NA, NA)
new_PC <- c(5039, 1402, 3050, 3021, 2154, 4853, 1252, 2954)
changed_PC <- c("No", NA, "No", "Yes", NA, NA, "No", "No")
df <- data.frame(prev_PC , new_PC, changed_PC )
我想要的是:
prev_PC
5039, 1402, 3050, NA, NA, NA, 1252, 2954
我得到什么:
prev_PC
5039, NA, 3050, NA, NA, NA, 1252, 2954
uj5u.com熱心網友回復:
第一個解決方案如下所示:
df %>%
mutate(prev_PC = case_when(changed_PC == "No" &
is.na(prev_PC) ~ new_PC,
TRUE ~ prev_PC))
但這可能更好:
df %>%
mutate(prev_PC = if_else(is.na(prev_PC) &
changed_PC == "No", new_PC, prev_PC))
導致:
> df %>%
print() %>%
mutate(prev_PC = if_else(is.na(prev_PC) &
changed_PC == "No", new_PC, prev_PC))
prev_PC new_PC changed_PC
1 5039 5039 No
2 1402 1402 <NA>
3 3050 3050 No
4 NA 3021 Yes
5 NA 2154 <NA>
6 NA 4853 <NA>
7 NA 1252 No
8 NA 2954 No
prev_PC new_PC changed_PC
1 5039 5039 No
2 1402 1402 <NA>
3 3050 3050 No
4 NA 3021 Yes
5 NA 2154 <NA>
6 NA 4853 <NA>
7 1252 1252 No
8 2954 2954 No
(見前后)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/475005.html
上一篇:我可以用AND替換if陳述句嗎?
