разбить строки и преобразовать в фрейм данных - PullRequest
2 голосов
/ 12 июня 2019

У меня есть 65-элементный символьный вектор в формате. Длина каждого элемента различна, но колеблется от 3 до 8 на основе запятых .:10000

b[1]= "aaaa, bbbb, cccc"
...
b[1000]="aaaa, bbbb, cccc, dddd, eeee, ffff"
...
b[3000]="aaaa, bbbb, cccc, dddd, eeee, ffff, gggg"
b[3001]="aaaa, bbbb, cccc"

Я хочу преобразовать во фрейм данных:

row  col1 col2 col3 col4 col5 col6 col7
1    aaaa bbbb cccc
1000 aaaa bbbb cccc dddd eeee ffff
3000 aaaa bbbb cccc dddd eeee ffff gggg

Я пытался:

 data.frame( do.call( rbind, strsplit( b, ',' ) ) ) 

и получил:

Предупреждающее сообщение: В (функция (..., deparse.level = 1): количество столбцов результата не кратно длине вектора (аргумент 1)

Есть предложения?

Ответы [ 2 ]

4 голосов
/ 12 июня 2019

Мы можем использовать read.csv после вставки строки вместе и свертывания с "\n".

read.csv(text = paste0(b, collapse = "\n"), header = FALSE)

#    V1    V2    V3    V4    V5    V6    V7
#1 aaaa  bbbb  cccc                        
#2 aaaa  bbbb  cccc  dddd  eeee  ffff      
#3 aaaa  bbbb  cccc  dddd  eeee  ffff  gggg

Если вы хотите читать пустые строки как NA, укажите их в na.strings

read.csv(text = paste0(b, collapse = "\n"), header = FALSE, na.strings = "")

Другой вариант - stri_list2matrix из stringi

data.frame(stringi::stri_list2matrix(strsplit(b, ","), byrow = TRUE))

#   X1    X2    X3    X4    X5    X6    X7
#1 aaaa  bbbb  cccc  <NA>  <NA>  <NA>  <NA>
#2 aaaa  bbbb  cccc  dddd  eeee  ffff  <NA>
#3 aaaa  bbbb  cccc  dddd  eeee  ffff  gggg

данные

b <- c("aaaa, bbbb, cccc", "aaaa, bbbb, cccc, dddd, eeee, ffff", 
       "aaaa, bbbb, cccc, dddd, eeee, ffff, gggg")
1 голос
/ 12 июня 2019

Мы можем использовать fread из data.table

library(data.table)
fread(paste(b, collapse="\n", sep=""), fill = TRUE)
#   V1   V2   V3   V4   V5   V6   V7
#1: aaaa bbbb cccc                    
#2: aaaa bbbb cccc dddd eeee ffff     
#3: aaaa bbbb cccc dddd eeee ffff gggg

данные

b <- c("aaaa, bbbb, cccc", "aaaa, bbbb, cccc, dddd, eeee, ffff", 
   "aaaa, bbbb, cccc, dddd, eeee, ffff, gggg")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...