Чтение текстового файла с разделителем следующей строки - PullRequest
4 голосов
/ 15 апреля 2019

Я не уверен, как правильно сформулировать этот вопрос, поэтому приведу пример.
Допустим, у меня есть файл .txt, где первая строка - это ДАТА, а вторая - это ТЕКСТ. Затем шаблон повторяется, 3-я строка - ДАТА, 4-я - ТЕКСТ. Как бы я прочитал это в R и преобразовал бы в два столбца dataframe.
По сути, я вижу это как разделитель следующей строки, не уверен, что это правильный способ описать это.

Вот пример данных, которые будут сохранены в .txt файле:

.LOG
3:42 PM 12/04/2019
Task 1
3:45 PM 12/04/2019
Task 2
3:55 PM 13/04/2019
Task 3
3:47 PM 15/04/2019

Я хочу, чтобы это выглядело так:

DATE                TEXT
3:42 PM 12/04/2019  Task 1
3:45 PM 12/04/2019  Task 2
3:55 PM 13/04/2019  Task 3

Ответы [ 3 ]

4 голосов
/ 15 апреля 2019

Считайте файл, используя read.table с sep = "\n", чтобы у вас был один столбец данных

df <- read.table(text = "3:42 PM 12/04/2019
                 Task 1
                 3:45 PM 12/04/2019
                 Task 2
                 3:55 PM 13/04/2019
                 Task 3", sep = "\n")

Для чтения его из файла выполните

df <- read.table("path_of_the_file.txt", sep = "\n")

Теперь разделите егов два столбца, выбрав чередующиеся строки

data.frame(Date = df[c(TRUE, FALSE), ], Text = df[c(FALSE, TRUE), ])

#               Date    Text
#1 3:42 PM 12/04/2019 Task 1
#2 3:45 PM 12/04/2019 Task 2
#3 3:55 PM 13/04/2019 Task 3
3 голосов
/ 15 апреля 2019

Вот гораздо лучший вариант с matrix методом

as.data.frame(matrix(trimws(df$V1), ncol = 2, byrow = TRUE, 
          dimnames = list(NULL, c("DATE", "TEXT"))))
#               DATE   TEXT
#1 3:42 PM 12/04/2019 Task 1
#2 3:45 PM 12/04/2019 Task 2
#3 3:55 PM 13/04/2019 Task 3

после прочтения набора данных

данные

df <- read.table("file.txt", sep = "\n")
3 голосов
/ 15 апреля 2019

Вы можете сделать что-то вроде этого:

 MessyData <- read.table("Myfile.txt")
 CleanData <- data.frame(DATE = MessyData[seq(1, length(MessyData), by = 2)],
                         TEXT = MessyData[seq(2, length(MessyData), by = 2)])
...