Выберите лучшие n переменных в R при сопоставлении значений - PullRequest
0 голосов
/ 02 мая 2020

У меня большой набор данных временных рядов, и я хотел бы выбрать 10 лучших наблюдений для каждой даты на основе значений в одном из моих столбцов.

Я могу сделать это, используя group_by ( Дата)%>% top_n (10)

Однако, если значения для 10-го и 11-го наблюдения равны, то они оба выбраны, так что я получаю 11 наблюдений вместо 10.

Кто-нибудь знает, что я могу сделать, чтобы убедиться, что выбраны только 10 наблюдений?

Ответы [ 3 ]

1 голос
/ 02 мая 2020

Вы можете arrange данных и выбрать первые 10 строк в каждой группе.

library(dplyr)
df %>% arrange(Date, desc(col_name)) %>% group_by(Date) %>% slice(1:10)

Аналогично, с filter

df %>% 
 arrange(Date, desc(col_name)) %>% 
 group_by(Date) %>% 
 filter(row_number() <= 10)
0 голосов
/ 02 мая 2020

Мы можем использовать base R

df1 <- df[with(df, order(Date, -value)),]
df1[with(df1, ave(seq_along(Date), Date, FUN = function(x) x %in% 1:10)),]
0 голосов
/ 02 мая 2020

С помощью data.table вы можете сделать

library(data.table)
setDT(df)
df[order(Date, desc(value))][, .SD[1:10], by = Date]

Изменить value, чтобы соответствовать имени переменной, используемой для выбора, какое наблюдение следует сохранить в случае связей. Вы также можете сделать:

df[order(Date, desc(value))][, head(.SD,10), by = Date]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...