按组保留所有变量的最后一个非缺失观察

问题描述

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

输入:

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

期望的输出

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

此处首选data.table(或dplyr)解决方

OBS:这与this question有关,但那里的主要答案似乎在某些组中引起了不必要的 NA

解决方法

使用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
,

使用 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 
,

baseaggregate可以使用。

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...