Извлечь строки символов разной длины из большого списка в кадр данных? - PullRequest
0 голосов
/ 08 октября 2019

Я загрузил файл .txt с разделителями "|,", поэтому я использовал strsplit()

lob<-readLines("lob_lobbying.txt")
lob<-strsplit(lob, "|,", fixed=TRUE)

Однако на выходе получается большой список длиной 1213906. Каждый из них представляет собой списоквведите символы, но некоторые из них имеют длину 16, а другие 17.

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

Например, когда я делаю

X <-rbind(lob[[1]],lob[[2]], lob[[3]])
df<-as.data.frame(X)

X - это именно тот тип вывода, который я хочу (потому что тогда я могу сделать data.frame, и он отлично работает!) Однако, учитывая длинуиз списка 1213906 мне нужно автоматизировать этот процесс.

Но как только я пытаюсь do.call(rbind, lob), он не работает. Я получаю

"число столбцов результата не кратно длине вектора (arg 5)"

Я думаю, потому что некоторые из этих строк символов имеют длину 16и другие длина 17.

Есть ли цикл для извлечения каждой из этих строк на основе, если у них есть 16 или 17 символов, а затем связать их?

1 Ответ

0 голосов
/ 08 октября 2019

Вместо выполнения [[1]], [[2]], .. мы можем использовать do.call после заполнения NA в конце, когда length элемента list меньше, чем maximum length

lob <- lapply(lob, `length<-`, max(lengths(lob)))
df1 <- do.call(rbind.data.frame, lob)

Кроме того, вместо использования readLines и последующего разбиения с помощью strsplit, это можно прочитать с помощью read.table с аргументом sep и fill = TRUE

df1 <- read.table("lob_lobbying.txt", sep="|", fill = TRUE, stringsAsFactors = FALSE)
...