2016-05-02 2 views
1

введите описание изображения здесь. Извлечены твиты из Twitter Streaming API в R в течение недели между определенными таймфреймами. У меня есть кадр данных из 42 переменных, один из которых - user_id_str. Он имеет тип Character. У меня есть вектор символов идентификаторов пользователя со мной. То, что я хочу сделать, это получить все твиты, связанные с идентификаторами пользователя в символьном векторе. Я уверен, что все идентификаторы пользователей в символьном векторе также присутствуют в фрейме данных.Как извлечь все твиты из фрейма данных, заданного символьным вектором «user_id_str» в R

timeframe_tue - это набор данных, в котором есть все твиты вторника с 11:00 до 13:00.

common_users является символом вектор с идентификаторами пользователей я заинтересован. Он имеет длину 93

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

com_tue <- timeframe_tue[timeframe_tue$user_id_str[common_user],] 

timeframe_tue[,"user_id_str"][user_count] –– this didn't work either 

timeframe_tue$user_id_str[timeframe_tue$user_id_str==user_count]–– Neither did this. 

This is a sample of how my data frame looks like:

Может кто-то помочь мне понять эту проблему?

+1

Можете ли вы предложить образец данных? Может быть, загрузите его в github? – polka

+0

Попробуйте: 'timeframe_tue [timeframe_tue $ user_id_str% in% common_users,]' – HubertL

+0

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

ответ

1

Вы можете использовать очень быстро решение, основанное на data.table

# load library 
library(data.table) 

# convert yout data.frame to data.table to speed up the process 
    setDT(timeframe_tue) 


# filter 
    timeframe_tue[ user_id_str %in% common_user, ] 

Вы также можете использовать оператор %in%, чтобы исправить свое решение, как это:

timeframe_tue[ timeframe_tue$user_id_str %in% common_user, ] 
+0

Это похоже на трюк :). Но можете ли вы сказать мне, что именно было с моей командой? И почему это происходит быстрее после преобразования его в data.table? Большое спасибо :) –

+0

'data.table', вероятно, переполняется для 93-строчного DataFrame – cory

+0

Из-за того, как построен' data.table', это самый быстрый пакет для обработки данных, доступный сегодня. Вы можете узнать больше об этом [здесь] (https://cran.r-project.org/web/packages/data.table/vignettes/datatable-intro.pdf) и проверить хороший [обмануть лист о том, как его использовать здесь] (https://s3.amazonaws.com/assets.datacamp.com/img/blog/data+table+cheat+sheet.pdf) @UdayAyyagari, я рад, что мой ответ сработал. Я обновил ответ, исправляя ваш код. –

0

Вот dplyr решение. Вы действительно ищете правильный синтаксис «% in%».

library(dplyr) 

timeframe_tue = tbl_df(timeframe_tue)  

timeframe_tue %>% filter(user_id_str %in% common_user) 
+0

Большое спасибо. Это тоже работает :) –

Смежные вопросы