r - R:每个 ID 只有最近观察的子集数据
问题描述
我目前有一个任务问题。
我们分析了结构如下的 YT 趋势数据
我们在行中有观察结果,在列中有视频 ID、类别 ID、标题、趋势日期等内容。
任务是保持每个 video_id 的最新观察结果(视频有时会出现几天的趋势,我们只需要最新的观察结果(行)。
到目前为止,我尝试过:
newDataframe <- aggregate(trending_date ~ video_id, data=df, FUN=max)
虽然它完成了工作,但我没有所有其他变量期望我需要的趋势日期和 ID,因此我考虑将它与旧的绑定在一起?数据框,但我不知道如果没有不需要的旧观察,我应该如何做到这一点。
我非常感谢任何帮助!
解决方案
我们可以使用ggplot2
包中的经济数据来使答案可重现:
library(data.table)
econ <- as.data.table(ggplot2::economics_long)
econ
## date variable value value01
## 1: 1967-07-01 pce 507.4 0.0000000000
## 2: 1967-08-01 pce 510.5 0.0002660008
## 3: 1967-09-01 pce 516.3 0.0007636797
## 4: 1967-10-01 pce 512.9 0.0004719369
## 5: 1967-11-01 pce 518.1 0.0009181318
## ---
## 2866: 2014-12-01 unemploy 8688.0 0.4739085814
## 2867: 2015-01-01 unemploy 8979.0 0.4968816610
## 2868: 2015-02-01 unemploy 8705.0 0.4752506513
## 2869: 2015-03-01 unemploy 8575.0 0.4649877635
## 2870: 2015-04-01 unemploy 8549.0 0.4629351859
此命令(使用data.table
包)获取每个变量的最新行:
econ[order(-date), .SD[1], by=variable]
## variable date value value01
## 1: pce 2015-04-01 12158.9 0.9997769
## 2: pop 2015-04-01 320887.0 1.0000000
## 3: psavert 2015-04-01 5.6 0.2450331
## 4: uempmed 2015-04-01 11.7 0.3632075
## 5: unemploy 2015-04-01 8549.0 0.4629352
解释
econ
要子集的表order(-date)
按列对行进行date
降序排序(从最新到最旧)- 要按升序排序:
order(date)
- 按多列排序:
order(variable, date, etc.)
- 要按升序排序:
by=variable
variable
按列对数据进行分组.SD
一个“数据的子集”by
,这是一个特殊的表,在使用参数时可以访问;它是econ
表,但为每个值拆分为一个单独的表variable
.SD[1]
.SD
获取表格的第一行
为您的示例使用以下命令:
## Convert the data.frame to a data.table
setDT(df)
## Get the most recent observation per video_id
df[order(-trending_date), .SD[1], by=video_id
推荐阅读
- python - Pandas - 为每个实例选择最大值
- javascript - 通过'this'在javascript中列出()php
- r - 在 R 的全局环境中使用从包函数动态加载的 dll
- java - 从包含键的映射中获取最接近键的最快方法:5、10、15、20、25 等到 200
- javascript - 使用 javascript 操作页面上的元素
- azure-devops - 为什么 Azure-DevOps 用户看不到其他用户?
- sql - 如何修复sql中连接表的错误计数
- python - 战舰但无法定义
- reactjs - 如何在 React Native 中仅动态增加一个部分的高度
- c# - ASP.NET CORE 3.0 中的 IHtmlHelper - 获取属性值的正确方法是什么?