如何在 R 中使用条件将 2 行或更多行文本合并为 1 行

  • 本文关键字:文本 合并 条件 r regex
  • 更新时间 :
  • 英文 :


我想将 Thunderbird Mozilla 的 Sent 文件读入 R。 有时必须将 2 条或更多条线放在 1 条线上。 这些是以","逗号结尾的行 例如:

From: Frans  <frans@zeenit.nl>
Subject: volledig overzicht beschikbaar
To: aldjan@gmail.com, clen@zeenit.nl, pinge1@zeenit.nl,
griepje@zeenit.nl, Jowialj@live.com, pelicaan@hotmail.com,
pico11@zeenit.nl
Date: Mon, 21 Mar 2016 14:17:09 +0100

合并后:

From: Frans  <frans@zeenit.nl>
Subject: volledig overzicht beschikbaar
To: aldjan@gmail.com, clen@zeenit.nl, pinge1@zeenit.nl, griepje@zeenit.nl, Jowialj@live.com, pelicaan@hotmail.com,  pico11@zeenit.nl
Message-ID: <56EFF455.5000006@zeenit.nl>
Date: Mon, 21 Mar 2016 14:17:09 +0100

我不会只依赖逗号。使用grep您可以识别带有To:标记的行并粘贴所有行,直到具有以下标记的行Message-ID:/Date:

cleanHeader <- function(x) {
line.to <- grep("^To", header)
line.next <- grep("^Date|^Mess", header)[1]
new.to <- paste(header[line.to:(line.next - 1)], collapse="")
c(header[1:(line.to - 1)], new.to, header[line.next:length(header)])
}

结果

cleanHeader(header1)  
[1] "From: Frans  <frans@zeenit.nl>"
[2] "Subject: volledig overzicht beschikbaar"
[3] "To: aldjan@gmail.com, clen@zeenit.nl, pinge1@zeenit.nl, griepje@zeenit.nl, 
Jowialj@live.com, pelicaan@hotmail.com, pico11@zeenit.nl"
[4] "Date: Mon, 21 Mar 2016 14:17:09 +0100"                                                   
cleanHeader(header2)
[1] "From: Frans  <frans@zeenit.nl>"                                                  
[2] "Subject: volledig overzicht beschikbaar"
[3] "To: aldjan@gmail.com, clen@zeenit.nl, pinge1@zeenit.nl, griepje@zeenit.nl, 
Jowialj@live.com, pelicaan@hotmail.com,  pico11@zeenit.nl"
[4] "Message-ID: <56EFF455.5000006@zeenit.nl>"
[5] "Date: Mon, 21 Mar 2016 14:17:09 +0100"
<小时 />

数据:

tmp <- tempfile()
cat("From: Frans  <frans@zeenit.nl>
Subject: volledig overzicht beschikbaar
To: aldjan@gmail.com, clen@zeenit.nl, pinge1@zeenit.nl,
griepje@zeenit.nl, Jowialj@live.com, pelicaan@hotmail.com,
pico11@zeenit.nl
Date: Mon, 21 Mar 2016 14:17:09 +0100", file=tmp, sep="n")
header1 <- readLines(tmp)
cat("From: Frans  <frans@zeenit.nl>
Subject: volledig overzicht beschikbaar
To: aldjan@gmail.com, clen@zeenit.nl, pinge1@zeenit.nl, griepje@zeenit.nl, Jowialj@live.com, pelicaan@hotmail.com,  pico11@zeenit.nl
Message-ID: <56EFF455.5000006@zeenit.nl>
Date: Mon, 21 Mar 2016 14:17:09 +0100", file=tmp, sep="n")
header2 <- readLines(tmp)

最新更新