【问题标题】:keep last non missing observation for all variables by group按组保留所有变量的最后一个非缺失观察
【发布时间】:2021-06-08 03:41:12
【问题描述】:

我的数据有多个列,其中一些列在不同的行中有缺失值。我想按变量“g”对数据进行分组(折叠),保留每个变量的最后一个非缺失观测值。

输入:

d <- data.table(a=c(1,NA,3,4),b=c(1,2,3,4),c=c(NA,NA,'c',NA),g=c(1,1,2,2))

期望的输出

d_g <- data.table(a=c(1,4),b=c(2,4),c=c(NA,'c'),g=c(1,2))

这里首选data.table(或dplyr)解决方案

OBS:这与this question 有关,但那里的主要答案似乎导致某些组中不必要的 NAs

【问题讨论】:

    标签: r data.table coalesce


    【解决方案1】:

    使用data.table

    library(data.table)
    
    d[, lapply(.SD, function(x) last(na.omit(x))), g]
    
    #   g a b    c
    #1: 1 1 2 <NA>
    #2: 2 4 4    c
    

    【讨论】:

      【解决方案2】:

      使用dplyr 的一个选项可能是:

      d %>%
       group_by(g) %>%
       summarise(across(everything(), ~ if(all(is.na(.))) NA else last(na.omit(.))))
      
            g     a     b c    
        <dbl> <dbl> <dbl> <chr>
      1     1     1     2 <NA> 
      2     2     4     4 c 
      

      【讨论】:

        【解决方案3】:

        base中可以使用aggregate

        aggregate(.~g, d, function(x) tail(x[!is.na(x)], 1), na.action = NULL)
        #  g a b c
        #1 1 1 2  
        #2 2 4 4 c
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-12-08
          • 1970-01-01
          相关资源
          最近更新 更多