filter () фрейм данных по тому, находится ли значение в первых 12 строках столбца другого фрейма - PullRequest
0 голосов
/ 08 декабря 2018

Я работаю с индексом всех снимков, которые друг отправил за последний месяц.Он находится в рамке df, а соответствующие атрибуты - to и time.Я хотел бы выделить экземпляры, которые "к" любому из 12 наиболее часто встречающихся имен в to.У меня есть фрейм данных summary с каждым уникальным значением to и их частотами.summary определяется как:

> summary <- arrange(count(df, to), desc(n))

Я пытался использовать filter () для сравнения значений от df$to до head(summary$to, 12)

> top12 <- filter(df, to == head(summary$to, 12))

, что дало мне ошибку

Warning message:
In to == head(summary$to, 12) :
  longer object length is not a multiple of shorter object length

и очень странный кадр данных для top12, который имеет, казалось бы, случайный выбор экземпляров из каждого to с меньшим количеством строк, чем есть экземпляры каждого из верхних 5 to значений.Я могу использовать вектор с именами, введенными вручную, и получать именно то, что должен, но мне нужно масштабируемое решение, чтобы я мог легко расширять или сокращать включенный диапазон и легко обновлять при добавлении данных из будущих месяцев.Поскольку вектор работал, я попытался преобразовать head(summary$to, 12) в вектор, но получил ту же ошибку.

> top12 <- filter(df, to == c("name 1","name 2", ... "name 12"))
> top12 <- filter(df, to == as.vector(head(summary$to, 12)))
Warning message:
In to == as.vector(head(summary$to, 12)) :
  longer object length is not a multiple of shorter object length

Что я делаю не так?Есть ли еще лаконичные способы сделать то же самое?

1 Ответ

0 голосов
/ 08 декабря 2018

Попробуйте:

top12 <- filter(df, to %in% summary$to[1:12])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...