我目前正在使用類似于以下內容的時間序列資料:
| ID | 變數1 | 變數2 | 變數 3 | 變數4 | 變數5 |
|---|---|---|---|---|---|
| 1 | 一種 | 不適用 | 一種 | 不適用 | 一種 |
| 2 | 乙 | C | 不適用 | 不適用 | 乙 |
| 3 | 一種 | 一種 | 不適用 | 不適用 | 一種 |
| 4 | 一種 | 乙 | 不適用 | 不適用 | 乙 |
| 5 | C | 不適用 | 乙 | 不適用 | 乙 |
df <- data.frame("ID" = c(1, 2, 3, 4, 5),
"Var1" = c("A", "B", "A", "A", "C"),
"Var2" = c(NA, "C", "A", "B", NA),
"Var3" = c("A", NA, NA, NA, "B"),
"Var4" = c(NA, NA, NA, NA, NA),
"Var5" = c("A", "B", "A", "B", "B"))
如果第一個非缺失的前一個值和第一個非缺失的下一個值一致,我希望填寫“NA”值。也就是說,期望的結果是
| ID | 變數1 | 變數2 | 變數 3 | 變數4 | 變數5 |
|---|---|---|---|---|---|
| 1 | 一種 | 一種 | 一種 | 一種 | 一種 |
| 2 | 乙 | C | 不適用 | 不適用 | 乙 |
| 3 | 一種 | 一種 | 一種 | 一種 | 一種 |
| 4 | 一種 | 乙 | 乙 | 乙 | 乙 |
| 5 | C | 不適用 | 乙 | 乙 | 乙 |
ID = 2 的資料沒有被替換,因為 Var2 和 Var5 不匹配。此外,不會替換 Var2 處 ID = 2 的缺失值,因為 Var1 和 Var3 不一致。我正在努力解決如何做到這一點,任何幫助將不勝感激。
uj5u.com熱心網友回復:
- 轉動更長的時間以使用
tidyr::fill(). - 用于
fill()創建fill_down和fill_up列,將分別包含上一個和下一個非缺失值。 - 如果前一個非缺失 == 下一個非缺失,則使用該值;否則保持原樣。(這也將保持非缺失值不變,因為在這種情況下,前一個非缺失值將始終 == 下一個非缺失值。)
- 轉回原始格式。
library(tidyverse)
df_filled <- df %>%
pivot_longer(!ID) %>%
mutate(
fill_down = value,
fill_up = value
) %>%
group_by(ID) %>%
fill(fill_down) %>%
fill(fill_up, .direction = "up") %>%
mutate(value = if_else(fill_down == fill_up, fill_down, value)) %>%
ungroup() %>%
pivot_wider(id_cols = ID)
df_filled
# # A tibble: 5 x 6
# ID Var1 Var2 Var3 Var4 Var5
# <dbl> <chr> <chr> <chr> <chr> <chr>
# 1 1 A A A A A
# 2 2 B C NA NA B
# 3 3 A A A A A
# 4 4 A B B B B
# 5 5 C NA B B B
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/431718.html
上一篇:重命名重復的ID熊貓
