Unlisting Corpus из пакета ТМ дает НА - PullRequest
0 голосов
/ 17 мая 2018

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

Когда я использую

twit[[1]]$content

Я вижу свои данные. Однако, когда я пытаюсь удалить его из списка, я получаю NA для всех моих записей.

twitCln <- data.frame(text=unlist(sapply(twit, '[', "content")), stringsAsFactors=F)

Связанный вопрос Цикл в корпусе без потери структуры корпуса обсуждается после единственного ответа, который имеет ту же проблему, но, похоже, не имеет разрешения.

Вот некоторый воспроизводимый код.

library(tm)
bbTwit <- as.data.frame(c("Text Line One!", "Text Line 2"), stringsAsFactors = F)
colnames(bbTwit) <- 'Contents'
bbTwit$doc_id <- row.names(bbTwit) 
twit <- bbTwit[c('doc_id','Contents')]
colnames(twit) <- c('doc_id','text')

twit <-Corpus(DataframeSource(data.frame(twit)))
twit <-tm_map(twit, removePunctuation)
twit <-tm_map(twit, stripWhitespace)

twit[[1]]$content

twitCln <- data.frame(text=unlist(sapply(twit, '[', "content")), stringsAsFactors=F)

Ожидаемым результатом будет кадр данных с двумя наблюдениями, где «Первая строка текста» будет первой записью, а «Вторая строка текста» - второй. То, что я получаю, это два наблюдения NA

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Чтобы получить содержимое, просто используйте функцию content(). Например

content(twit)
# [1] "Text Line One" "Text Line 2"

или поместите его в data.frame

data.frame(text=content(twit))
#            text
# 1 Text Line One
# 2   Text Line 2
0 голосов
/ 17 мая 2018

На основании вашего описания желаемого выхода это звучит так, как вы хотите

mydf <- data.frame(unlist(twit)[1:(length(unlist(twit))-1)])
content1                              Text Line One
content2                                Text Line 2

где имена строк / столбцов, конечно, могут быть установлены на что угодно с помощью names().

или для простого случая:

rbind(twit[[1]]$content,
           twit[[2]]$content)
[1,] "Text Line One"
[2,] "Text Line 2"

, например * * 1016

mydf <- data.frame(rbind(twit[[1]]$content,
                 twit[[2]]$content)
)
colnames(mydf) <- "Pretty Column"
mydf
    Pretty Column
1   Text Line One
2   Text Line 2
...