Подмножество на основе списка во вложенном фрейме данных - PullRequest
0 голосов
/ 07 февраля 2019

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

В частности, у меня есть набор данных около 200 000 твитов (приобретено через rtweet), которое я ищу в подмножестве, содержащем только те твиты, которые содержат один (или более) из 10 хэштегов в образце.Эти 10 хэштегов являются наиболее часто совпадающими в образце и хранятся в hashtags_top.

Обычные методы для поднабора не работают (то есть они дают бессмысленные результаты).Я попытался использовать %in% в нескольких методах подмножеств:

tweets_tops <- subset(tweets, hashtags %in% hashtags_top$Var1)
tweets_tops <- tweets[tweets$hashtags %in% hashtags_top$Var1,]
tweets_tops <- filter(tweets, hashtags %in% hashtags_top$Var1)

Все они дали одно и то же подмножество из 112 твитов, что, безусловно, неверно, учитывая, что только один верхний хэштег показывает более 11 000чириканье.Я также попытался распечатать столбец твитов $ hashtags через

   vapply(tweets$hashtags, paste, collapse = ", ", character(1L))

с тем же результатом.

Структура данных выглядит следующим образом [поскольку только столбец "hashtag" имеетбеспокойство здесь, я включу только этот].

str(tweets$hashtags)
List of 196987
 $ : chr [1:4] "Professional" "dynamic" "website" "development"
 $ : chr NA
 $ : chr [1:4] "Professional" "dynamic" "website" "development"
 $ : chr "MeTwo"
....

Структура фрейма данных hashtags_top, который используется для поднабора, - это структура простого фрейма данных с двумя столбцами, где Var1 содержит хэштеги, а Freq содержит их частоту:

str(hashtags_top)
'data.frame':   10 obs. of  2 variables:
 $ Var1: chr  "deutschland" "nsu" "mequeer" "kochallenge" ...
 $ Freq: int  1691 1862 2359 2372 2756 2853 3773 3900 8292 11745

I 'Мы пришли к выводу, что оценка с помощью %in% не работает из-за того, что в фрейме данных есть несколько элементов для оценки.То есть он работает только в том случае, если существует ровно один хэштег (и он является частью желаемого подмножества).Поэтому я ищу решение, которое позволяет проверить, является ли какой-либо из хэштегов в строке частью top_hashtags, и если это так, включить его в подмножество.

Я полагаю, что одним из решений будет выравниваниеФрейм данных, подмножество и удаление дубликатов - но я бы хотел этого избежать.Возможно, есть более простое решение этой конкретной проблемы, но даже после долгого осмотра я не могу найти его.Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 08 февраля 2019

Это можно сделать, используя dplyr и purrr:

library(purrr)
library(dplyr)
rt <- search_tweets("#rstats", n = 180, include_rts = FALSE)
rt %>% 
    select(hashtags)  %>%
    pmap(~any(c('DataScience','PowerBI') %in% .x)) %>% 
    flatten_lgl %>%  
    mutate(.data=rt, keep=.) %>%  
    filter(keep) %>%  
    select(-keep)  

Рабочая лошадка - pmap, что позволяет сопоставить функцию с выбранным столбцом хэштега.Если какой-либо из тегов, которые мы хотим (в вашем случае hashtags_top$Var1), находится в столбце хэштегов, мы получаем истинное значение.Мы связываем этот результат с таблицей mutate, filter строк, которые имеют результат TRUE, а затем удаляем временный столбец keep.

...