R: вставка (или объединение) переменного количества строк вместе в один - PullRequest
0 голосов
/ 30 октября 2018

У меня есть текстовый файл, который я пытаюсь проанализировать и поместить информацию в фрейм данных. В каждом из «событий» могут быть или не быть некоторые заметки с ним. Однако заметки могут занимать различное количество строк. Мне нужно объединить заметки для каждого события в одну строку для хранения в столбце фрейма данных.

ID: 20470
Version: 1
notes: 


ID: 01040
Version: 2
notes: 
The customer was late.
Project took 20 min. longer than anticipated
Work was successfully completed

ID: 00000
Version: 1
notes: 
Customer was not at home.

ID: 00000
Version: 7
notes: 
Fax at 2:30 pm
Called but no answer
Visit home no answer
Left note on door with call back number
Made a final attempt on 12/5/2013
closed case on 12/10 with nothing resolved 

Так, например, для третьего события заметки должны быть одной длинной строкой: «Заказчик опоздал. Проект занял на 20 минут больше, чем предполагалось. Работа была успешно завершена», которая затем будет сохранена в столбцах заметок в фрейм данных.

Для каждого события я знаю, сколько строк охватывает нота.

1 Ответ

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

Примерно так (на самом деле, вы были бы счастливее и узнали бы больше, разбираясь в этом сами, я просто откладывал на две задачи):

x <- readLines("R/xample.txt")  # you'll probably read it from  a file
ids <- grep("^ID:", x)   # detecting lines starting with ID:
versions <- grep("^Version:", x)
notes <- grep("^notes:", x)
nStart <- notes + 1  # lines where the notes start
nEnd <- c(ids[-1]-1, length(x))  # notes end one line before the next ID: line
ids <- sapply(strsplit(x[ids], ": "), "[[", 2)
versions <- sapply(strsplit(x[versions], ": "), "[[", 2)
notes <- mapply(function(i,j) paste(x[i:j], collapse=" "), nStart, nEnd)
df <- data.frame(ID=ids, ver=versions, note=notes, stringsAsFactors=FALSE)

скорость передачи данных

> dput(x)
c("ID: 20470", "Version: 1", "notes: ", "  ", "  ", "ID: 01040", 
"Version: 2", "notes: ", "  The customer was late.", "Project took 20 min. longer than anticipated", 
"Work was successfully completed", "", "ID: 00000", "Version: 1", 
"notes: ", "  Customer was not at home.", "", "ID: 00000", "Version: 7", 
"notes: ", "  Fax at 2:30 pm", "Called but no answer", "Visit home no answer", 
"Left note on door with call back number", "Made a final attempt on 12/5/2013", 
"closed case on 12/10 with nothing resolved ")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...