首页 > 解决方案 > R中长数据集中每个ID组的最后一行子集

问题描述

我有一个 142,415 行和 965 列的纵向数据集。对于数据集中的每个 ID,都有多行,不一定每个 ID 的行数相同。

我想获取每个 ID 的最后一行(数据已经排序)并创建一个仅包含这些的数据框,保留所有剩余的 964 列数据。

当我查看以前解决此问题的问题时,很多建议都在使用aggregate(),但我不能使用它(至少据我所知),因为我的专栏太多。

我确实尝试了以下方法,但这让我的电脑崩溃了,所以我想知道是否有比制作列表然后从中形成数据框更快的方法来做到这一点:

data.list<-by(data.in, data.in$ID, tail, n=1)
data.new<-do.call("rbind", as.list(data.list))

标签: rdplyrgroupingsubsetplyr

解决方案


我没有你的数据,但使用dplyr你可以:

library(dplyr) 

iris %>% 
group_by(Species) %>%
slice(n())

# Sepal.Length Sepal.Width Petal.Length Petal.Width Species   
#         <dbl>       <dbl>        <dbl>       <dbl> <fct>     
#1          5           3.3          1.4         0.2 setosa    
#2          5.7         2.8          4.1         1.3 versicolor
#3          5.9         3            5.1         1.8 virginica 

或者,您可以使用data.table

library(data.table)
setDT(iris)[, .SD[.N], by=Species]

推荐阅读