R: данные подмножества только с самым последним наблюдением на ID - PullRequest
0 голосов
/ 04 июля 2019

У меня сейчас проблема с заданием.

Мы анализируем данные трендов YT, которые структурированы на следующие

У нас есть наблюдения в строке и такие вещи, как идентификатор видео, идентификатор категории, заголовок, дата изменения и т. Д. В столбцах.

Задача состоит в том, чтобы сохранить самые последние наблюдения за video_id (у видео иногда несколько дней в тенденциях, и нам нужно только самое последнее наблюдение (строка).

Я попробовал это до сих пор с:

newDataframe <- aggregate(trending_date ~ video_id, data=df, FUN=max)

Несмотря на то, что он выполнил работу, у меня нет других переменных, ожидающих дату тренда и идентификатор, который мне нужен, поэтому я подумал о том, чтобы связать его со старым? фрейм данных, но я понятия не имею, как я должен это сделать, не имея нежелательных старых наблюдений.

Я очень ценю любую помощь!

1 Ответ

0 голосов
/ 04 июля 2019

Мы можем использовать экономические данные из пакета 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 A " S ubset D ata", которая представляет собой специальную таблицу, к которой можно получить доступ при использовании аргумента 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...