基本问题
我有表格的资料
doc
id 1
var1 A
var2 B
...
varStar 453
varStar 3432
varStar 32
...
varN
doc
var1 A
var2 B
(And so on)其中doc表示每个记录/观察的开头,varI表示一个变量,varStar表示可能有多个条目的感兴趣的变量。
我想
id和varStar的所有实例。varStar是一个类别,因此需要重叠)。这看起来应该很容易,但我只熟悉csv/电子表格数据,也许只是不知道谷歌该怎么说。例如,我不喜欢创建一个完整的SQL数据库,等等,因为我不需要整个数据库。当然,可能更容易做一些精心组织,然后挑选出选择的部分。
上下文-我的应用程序
我想通过Google/USPTO批量下载检索美国专利类。因此,id是专利号,而varStar是专利级fsc。然后,我想将它与NBER专利数据合并。我的申请主要取决于专利级别的指定。NBER数据,虽然在许多方面不错,但只报告了每个专利的一个“主”类。这不太好,因为根据数据的随意阅读和Volodin (2010)的一篇论文,专利通常被授予几个顶级级别。
伏洛丁德米特里(2010年) "NBER专利数据技术分类问题与发明者移动性研究有关的问题“,工作文件。udel.edu/~volodin/pat/draft.pdf。
发布于 2015-08-07 20:59:07
假设dat.txt看起来像:
doc
id 1
var1 A
var2 B
...
varStar 453
varStar 3432
varStar 32
...
varN
doc
id 2
var1 A
var2 B
varStar 111
varStar 222
varStar 333333
...这是一个可能的框架:
library(dplyr)
dat <- readLines("dat.txt")
doc_starts <- which(grepl("^doc", dat))
doc_ends <- lead(doc_starts)-1
doc_ends[length(doc_ends)] <- length(dat)
# list-ified
lapply(seq_along(doc_starts), function(i) {
chunk <- dat[doc_starts[i]:doc_ends[i]]
id <- gsub("^id\ +", "", chunk[which(grepl("^id", chunk))])
varStars <- gsub("^varStar\ +", "", chunk[which(grepl("^varStar", chunk))])
list(id=id, varStar=varStars)
})
## [[1]]
## [[1]]$id
## [1] "1"
##
## [[1]]$varStar
## [1] "453" "3432" "32"
##
##
## [[2]]
## [[2]]$id
## [1] "2"
##
## [[2]]$varStar
## [1] "111" "222" "333333"
# data.frame-d
bind_rows(lapply(seq_along(doc_starts), function(i) {
chunk <- dat[doc_starts[i]:doc_ends[i]]
id <- gsub("^id\ +", "", chunk[which(grepl("^id", chunk))])
varStars <- gsub("^varStar\ +", "", chunk[which(grepl("^varStar", chunk))])
data_frame(id=id, varStar=varStars)
}))
## Source: local data frame [6 x 2]
##
## id varStar
## 1 1 453
## 2 1 3432
## 3 1 32
## 4 2 111
## 5 2 222
## 6 2 333333https://stackoverflow.com/questions/31886264
复制相似问题