R 使用子组中填充的值填充NA值

R 使用子组中填充的值填充NA值,r,na,missing-data,R,Na,Missing Data,我有以下data.frame: name nav_status destination A 5 MUMBAI A 0 NA A 1 NA B 5 NA B 0 NEW YORK B 1 NA 我打算用基于name列的值填充NA值。 我试过: 用上一次观察结转技术填充NA值,但随后数

我有以下data.frame:

name  nav_status   destination
 A       5           MUMBAI
 A       0            NA
 A       1            NA
 B       5            NA
 B       0          NEW YORK
 B       1            NA
我打算用基于name列的值填充NA值。 我试过:

  • 用上一次观察结转技术填充
    NA
    值,但随后数据会失真。我使用了
    zoo
    包和
    na.locf
    语法:


    NEW使用
    data.table
    ,我们将'data.frame'转换为'data.table'(
    setDT(df1)
    ),按'name'分组,使用
    na.rm=FALSE
    在目的地的前进方向上执行
    na.locf
    ,然后在反向模式下再次执行(
    fromLast=TRUE
    )并分配(
    :=/code>)将输出返回到同一列

    library(zoo)
    library(data.table)
    setDT(df1)[, destination := na.locf(na.locf(destination, 
          na.rm=FALSE), fromLast=TRUE),  by = name]
    df1
    #   name nav_status destination
    #1:    A          5      MUMBAI
    #2:    A          0      MUMBAI
    #3:    A          1      MUMBAI
    #4:    B          5    NEW YORK
    #5:    B          0    NEW YORK
    #6:    B          1    NEW YORK
    

    您可以使用dplyr包执行此操作:

    library(dplyr)
    dat %>%
      group_by(name) %>%
      mutate(destination = destination[which(!is.na(destination))][1])
    
    这将使用每个名称的destination的第一个非NA值填充destination列

        name nav_status destination
      (fctr)      (dbl)      (fctr)
    1      A          5      MUMBAI
    2      A          0      MUMBAI
    3      A          1      MUMBAI
    4      B          5    NEW YORK
    5      B          0    NEW YORK
    6      B          1    NEW YORK
    
        name nav_status destination
      (fctr)      (dbl)      (fctr)
    1      A          5      MUMBAI
    2      A          0      MUMBAI
    3      A          1      MUMBAI
    4      B          5    NEW YORK
    5      B          0    NEW YORK
    6      B          1    NEW YORK