r - 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))
解决方案
我没有你的数据,但使用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]
推荐阅读
- c - 更改 GtkTextView 的缓冲区
- bash - 如果用户输入与给定的选项不匹配,如何提供错误消息?
- reactjs - 材质 UI 按钮使用 creatMuiTheme 时返回错误
- java - Wildfly 强制重新部署不起作用/HTTP 连接器端口已在使用中
- c# - 如何在 C# 对象中解析 {"Europe":{"France":"Paris","UK":"London","Germany":"Berlin"}} Json 对象,其中键是实际对象值?
- r - 在R中的多列中计算NA
- python - 如何使用 python 在 XML 声明后添加注释
- vba - 你如何组织你的变量声明?
- python - 通过其编号(不是索引)获取 2D 数组元素
- azure-devops - Azure Devops yml 管道 if else 条件变量