从表中获取字符串并在R中作为列附加

时间:2016-08-09 17:27:06

标签: r

我有以下.csv文件:

https://drive.google.com/open?id=0Bydt25g6hdY-RDJ4WG41VFpyX1k

我希望能够获取日期和代理名称(粘贴其组成部分)并将它们作为列附加到表的右侧,直到它找到不同的名称和日期,为此做同样的事情剩余的名称和日期项目,以获得以下结果:

enter image description here

我唯一可以使用dplyr包的方法如下:

library(dplyr)
library(stringr)


report <- read.csv(file ="test15.csv", head=TRUE, sep=",")

date_pattern <- "(\\d+/\\d+/\\d+)"
date <- str_extract(report[,2], date_pattern)

report <- mutate(report, date = date)

这给了我以下结果:

enter image description here

我发现的困难可能是使用条件来使脚本获得适当的字符串并将其作为列附加到表的末尾。

1 个答案:

答案 0 :(得分:1)

这可能很粗糙,但我认为它说明了几件事:a)设置stringsAsFactors=F; b)&#34;预分配&#34;数据框中的列; c)使用列名而不是列号来设置值。

report<-read.csv('test15.csv', header=T, stringsAsFactors=F)

# first, allocate the two additional columns (with NAs)
report$date <- rep(NA, nrow(report))
report$agent <- rep(NA, nrow(report))

# step through the rows
for (i in 1:nrow(report)) {
  # grab current name and date if "Agent:"
  if (report[i,1] == 'Agent:') {
    currDate <- report[i+1,2]
    currName=paste(report[i,2:5], collapse=' ')
  # otherwise append the name/date
  } else {
    report[i,'date'] <- currDate
    report[i,'agent'] <- currName
  }
}
write.csv(report, 'test15a.csv')

Output file