首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非电子表格式数据导入和组织

非电子表格式数据导入和组织
EN

Stack Overflow用户
提问于 2015-08-07 19:12:33
回答 1查看 59关注 0票数 0

基本问题

我有表格的资料

代码语言:javascript
复制
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表示可能有多个条目的感兴趣的变量。

我想

  1. 使用R(或者Python,但我有点生疏)导入数据。
  2. 对于每个记录,检索idvarStar的所有实例。
  3. 以某种方式存储它们,以便于以后进行操作/合并。例如,一个列表或二进制(可能是稀疏的)矩阵(对于我的应用程序来说,varStar是一个类别,因此需要重叠)。

这看起来应该很容易,但我只熟悉csv/电子表格数据,也许只是不知道谷歌该怎么说。例如,我不喜欢创建一个完整的SQL数据库,等等,因为我不需要整个数据库。当然,可能更容易做一些精心组织,然后挑选出选择的部分。

上下文-我的应用程序

我想通过Google/USPTO批量下载检索美国专利类。因此,id是专利号,而varStar是专利级fsc。然后,我想将它与NBER专利数据合并。我的申请主要取决于专利级别的指定。NBER数据,虽然在许多方面不错,但只报告了每个专利的一个“主”类。这不太好,因为根据数据的随意阅读和Volodin (2010)的一篇论文,专利通常被授予几个顶级级别。

伏洛丁德米特里(2010年) "NBER专利数据技术分类问题与发明者移动性研究有关的问题“,工作文件。udel.edu/~volodin/pat/draft.pdf。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-07 20:59:07

假设dat.txt看起来像:

代码语言:javascript
复制
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
...

这是一个可能的框架:

代码语言:javascript
复制
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  333333
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31886264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档