Как мне прочитать текстовый файл в R, когда данные не находятся в таблице - PullRequest
5 голосов
/ 08 декабря 2011

Я получил очень длинный телефонный журнал в виде текстового файла, и я попытался прочитать его в R, но на самом деле это не работает.Текст имеет структуру, но это, безусловно, не таблица.Его структура следующая:

  1. Каждая запись состоит из нескольких строк, поэтому readLines не совсем уместны
  2. Каждая строка каждой записи представляет собой отдельное поле
  3. Некоторые записииметь дополнительное поле после второго поля
  4. Каждая новая запись отмечена пустой строкой.readLines или scan работали бы, если бы можно было указать, что записи разделены "\ n \ n", а поля (или столбцы) разделены "\ n"

ЗдесьВот пример:

TheInstitute 5467
  telephone line 4125526987 x 4567
  datetime 2011110516 12:56
  blay blay blah who knows what, but anyway it may have a comma

TheInstitute 5467
  telephone line 4125526987 x 4567
  datetime 2011110516 12:58
  blay blay blah who knows what

TheInstitute 5467
  telephone line 412552999 x 4999
  bump phone line 4125527777
  datetime 2011110516 12:59
  blay blay blah who knows what

TheInstitute 5467
  telephone line 4125526987 x 4567
  bump phone line 4125527777
  datetime 2011110516 13:51
  blay blay blah who knows what, but anyway it may have a comma

TheInstitute 5467
  telephone line 4125526987 x 4567
  datetime 2011110516 14:56
  blay blay blah who knows what

Как я могу сделать это в R?Я пробовал трюки со сканированием, вставкой, strsplit, но я вращаюсь в кругах.Возможно, мне придется поместить его в список, поскольку он может обрабатывать неодинаковое количество элементов.Я хотел бы, чтобы все записи имели одинаковое количество полей, и для тех записей, у которых нет одного поля (здесь называемого bump phone), я бы хотел, чтобы они имели просто NA в качестве значения в этом поле.Я был бы признателен за помощь даже для начала.Оттуда я могу играть и играть.

1 Ответ

15 голосов
/ 08 декабря 2011

Если multi.line = TRUE в функции scan, запись должна заканчиваться двумя окончаниями строки. Я сделал это с textConnection вокруг вашего файла, но вы бы использовали правильное имя файла:

inp <- scan(textConnection(txt), multi.line=TRUE, 
             what=list(place="character", tline1="character", 
             cline1="character", cline2 ="character", cline3="character"), sep="\n")
Read 5 records
> str(as.data.frame(inp))
'data.frame':   5 obs. of  5 variables:
 $ place : Factor w/ 1 level "TheInstitute 5467": 1 1 1 1 1
 $ tline1: Factor w/ 2 levels "  telephone line 4125526987 x 4567",..: 1 1 2 1 1
 $ cline1: Factor w/ 4 levels "  bump phone line 4125527777",..: 2 3 1 1 4
 $ cline2: Factor w/ 4 levels "  blay blay blah who knows what",..: 2 1 3 4 1
 $ cline3: Factor w/ 3 levels "","  blay blay blah who knows what",..: 1 1 2 3 1
> as.data.frame(inp)
              place                             tline1
1 TheInstitute 5467   telephone line 4125526987 x 4567
2 TheInstitute 5467   telephone line 4125526987 x 4567
3 TheInstitute 5467    telephone line 412552999 x 4999
4 TheInstitute 5467   telephone line 4125526987 x 4567
5 TheInstitute 5467   telephone line 4125526987 x 4567
                        cline1
1    datetime 2011110516 12:56
2    datetime 2011110516 12:58
3   bump phone line 4125527777
4   bump phone line 4125527777
5    datetime 2011110516 14:56
                                                           cline2
1   blay blay blah who knows what, but anyway it may have a comma
2                                   blay blay blah who knows what
3                                       datetime 2011110516 12:59
4                                       datetime 2011110516 13:51
5                                   blay blay blah who knows what
                                                           cline3
1                                                                
2                                                                
3                                   blay blay blah who knows what
4   blay blay blah who knows what, but anyway it may have a comma
5                                                                
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...