Класс и тип объекта отличаются в R. Как я должен сделать это последовательным? - PullRequest
0 голосов
/ 16 января 2020

Я скачал несколько твитов, используя библиотеку 'rtweet'. Его функция search_tweets () создает объект списка (типа), а его класс - «tbl_df», «tbl», «data.frame». Чтобы продолжить работать над этим, мне нужно преобразовать этот вывод search_tweets () в фрейм данных.

comments <- search_tweets(
queryString, include_rts = FALSE,
n = 18000, type = "recent",
retryonratelimit = FALSE)

typeof(comments)

list

class(comments)

"tbl_df" "tbl" "data.frame"

Я попытался преобразовать список в dataframe с помощью as.data.frame (), который не изменил тип, я также попытался обернуть его в as.dataframe (matrix (unlist (comments))), который также не изменил тип

commentData <- data.frame(comments[,1]) 
    for (column in c(2:ncol(comments))){
        commentData <- cbind(commentData, comments[,column])
    }
type(comments)

output: list

comments <- as.data.frame(comments)

output: list

Оба эти кода изменили не тип, а класс. Как мне изменить тип? Как, я хотел бы сохранить эти твиты в кадре данных и, следовательно, записать их как CSV (write_csv).

Когда я пишу «комментарии» в CSV, он выдает ошибку.

write_csv(comments, "comments.csv", append =  TRUE) 

Ошибка: ошибка в stream_delim_ (df, path, ..., bom = bom, quote_escape = quote_escape): не знаю, как обрабатывать вектор списка типов.

dput(comments)

dput (комментарии) структура (список (user_id = c ("1213537010930970624", "770697053538091008", "39194086", "887369171603931137", "924786826870587392", "1101014561") "110154561" ,33017061 "" "," 1201410499788689408 "," 1208038347735805953 "," 15608380 "," 54892886 "," 389914405 "," 432597210 "," 1196039261125918720 "), status_id = c (" 121742448036601470 ", 241 522 521 521 521 521 521 521 521 521 231 075 3753 0753 0753 0753 0753 072 072 072 072 072 072 0671 062 0671 062 0671 062 "3 1217022975108616193" , "1217002616757997568", "1216987196714094592", "1216986705170923520", "1216978052472688640", "1216947780129710080", "1216943924796739585", "1216925375789330432", "1216925016605880320", "1216924608944734208", "1216921598294249472", "1214991714688987136"), created_at = структура (c (1579091589, 1579037359, 1579004154, 1578995863, 1578991009, 1578987332, 1578987215, 1578985152, 1578977935, 1578977016, 1578972593, 1578972507, 1578972410, 1578971693, 1578511572), класс = c («POSIXct», «POSIXt»), tzone = «UT C»), screen_name = c («SufferMario», «_Mo» "," avi_rules16 "," Deb05810220 "," SriPappumaharaj "," Poison435 "," Poison435 "," RajeshK38457619 "," KK77979342 "," beingskysharma "," tetisheri "," sohinichat "," nehadix "12, nehadix12 "NisarMewati1"),

desired output in csv

screengrab of csv format

1 Ответ

1 голос
/ 16 января 2020

Вам не нужно ничего делать. comments уже data.frame. Это просто особый тип data.frame, известный как tibble. Но вы можете использовать их взаимозаменяемо. Что вы хотите сделать с comments, что вы в настоящее время не можете? Он уже должен делать все, что может делать data.frame.

Вывод из typeof() редко бывает полезен, поскольку он показывает только то, как объект хранится , а не то, что он есть . Используйте class(), чтобы понять, как ведет себя объект. Почти все «сложные» объекты в R хранятся в виде списков.

...