r-如果上一个值和下一个值一致,则替换缺失的值



我目前正在处理时间序列数据,它看起来如下:

>Var5NAANANA
ID Var1 Var2 Var3Var4
1 ANA
2 B C NA B
3 A
4 A BNA
5 C NA B
  1. 枢轴使用tidyr::fill()的时间更长
  2. 使用fill()创建fill_downfill_up列,这两列将分别包括上一个和下一个不丢失的值
  3. 如果上一个未丢失==下一个未缺失,则使用该值;否则保持值不变。(这也将保持非缺失值不变,因为在这种情况下,前一个非缺失值将始终==下一个非遗漏值。(
  4. 数据透视回原始格式
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  

最新更新