объединить фрейм данных из столбца - PullRequest
0 голосов
/ 29 августа 2018

У меня есть data.frame с двумя переменными: ID и Text Я использую следующую команду анализа текста, которая дает data.frame вывод 48 столбцов.

analysis <- textstat_readability(mydata$text,  measure = c("all"), remove_hyphens = TRUE)

Как добавить эти 48 столбцов результатов в виде отдельных столбцов в mydata?

В настоящее время я использую следующее:

analysis <- cbind(mydata$ID[1:100000], textstat_readability(mydata$text[1:100000],  measure = c("all"), remove_hyphens = TRUE))

Но чтобы закончить, нужно вечно.

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Не знаю, почему ваш подход требует целого вечности, чтобы быть честным, но правильный способ сделать это будет следующим, я думаю:

# (0.) Load the package and make a random sample dataset (usually this should be
# provided in the question, just saying):

library(quanteda)
mydata <- data.frame(ID = 1:100,
                     text = stringi::stri_rand_strings(
                       n = 100, 
                       length = runif(100, min=1, max=100), 
                       pattern = "[A-Za-z0-9]"),
                     stringsAsFactors = FALSE)

# 1. Make a quanteda corpus, where the ID is stored alongside the text column:

mydata_corpus <- corpus(mydata, docid_field = "ID", text_field = "text")

# 2. Then run the readability command:

`analysis <- textstat_readability(mydata_corpus,  measure = c("all"), remove_hyphens = TRUE)`

# 3. Now you can either keep this, or merge it with your original set based on
# IDs:

mydata_analysis <- merge(mydata, analysis, by.x = "ID", by.y = "document")

Это должно работать без необходимости использования cbind().

0 голосов
/ 29 августа 2018

У вас есть 100.000 записей с текстом. В зависимости от вашей системы и размера каждой текстовой записи, это может занять некоторое время. Вы можете попробовать ускорить процесс, используя больше ядер. Большинство процессов Quanteda работают параллельно, поэтому стоит попробовать.

Попробуйте сделать следующее, чтобы увидеть, ускоряет ли это:

library(quanteda)
# use all available cores - 1
quanteda_options(threads = parallel::detectCores() - 1)

analyses <- textstat_readability(mydata$text[1:100000],  measure = c("all"), remove_hyphens = TRUE)

analyses <- cbind(mydata$text[1:100000], analyses)

Тестирование с помощью data.frame, заполненного в 2000 раз, data_char_sampletext не показало большой разницы, если вы хотите сделать это в одном cbind действии. Но это зависит от того, насколько велика ваша mydata data.frame. Может быть, лучше сделать это в 2 шага.

...