R Преобразование большой символьной строки в фрейм данных - PullRequest
0 голосов
/ 30 октября 2018

Я работаю над проектом, в который мы импортировали данные из хранилища BLOB-объектов. Данные хранятся в виде одной гигантской строки символов.

Столбцы разделены запятой, а строки разделены этим символом "\ r \"

Как мне сделать это информационный кадр?

Вот пример данных:

 X1,X2,X3,X4,X5,\r\yes,yes,no,no,yes,\r\yes,yes,yes,no,yes

и это должно выглядеть следующим образом в кадре данных:

     X1  X2  X3  X4  X5
  1  yes yes no  no yes
  2  yes yes yes no yes

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Мы можем использовать read.table для чтения однострочных данных. Предполагая, что \ экранирован, после чтения с sep=",", используйте sub, чтобы заменить \ на ""

out <- read.table(text = str1, sep=",", fill = TRUE, 
 header = TRUE, stringsAsFactors = FALSE)[-6]
out$X1 <- sub("[\\]", "", out$X1)
out
#   X1  X2  X3 X4  X5
#1 yes yes  no no yes
#2 yes yes yes no yes

Данные

str1 <- "X1,X2,X3,X4,X5,\r\\yes,yes,no,no,yes,\r\\yes,yes,yes,no,yes"
0 голосов
/ 30 октября 2018

Первый шаг - заменить ,\r\ символом новой строки \n. Тем не менее, вы должны заметить, что в приведенном ниже примере мне пришлось использовать двойную обратную косую черту, поскольку \ является escape-символом в R. Измените, как необходимо в вашем живом примере, но это должно работать в любом случае.

x = 'X1,X2,X3,X4,X5,\\r\\yes,yes,no,no,yes,\\r\\yes,yes,yes,no,yes'
x = gsub(',\\r\\', '\n', x, fixed=TRUE)

> read.csv(text=x)
   X1  X2  X3 X4  X5
1 yes yes  no no yes
2 yes yes yes no yes
...