我想对以下数据集进行子集化。具体来说,我只想检索“csv”格式的 1)ID、2)ASIN、3)组、4)销售排名和 5)类别。我将使用 R 或 Python。 (R不能经常读取这种不规则的数据格式)。
以下数据没有通常的格式,所以我不知道如何对其进行子集化。我有两年 有 R 经验,但主要使用该工具进行统计目的。所以,我不习惯处理这种不寻常格式的数据操作。如果有人能给我答案(或线索),那就太好了。 最下面是一组由“key:value”组成的数据。最终结果应该是这样的 这个:
Id ASIN group salesrank categories
1 0827229534 Book 396585 2
原始数据如下:
************************************************************************************************
Id: 1
ASIN: 0827229534
title: Patterns of Preaching: A Sermon Sampler
group: Book
salesrank: 396585
similar: 5 0804215715 156101074X 0687023955 0687074231 082721619X
categories: 2
|Books[283155]|Subjects[1000]|Religion & Spirituality[22]|Christianity[12290]|Clergy[12360]|Preaching[12368]
|Books[283155]|Subjects[1000]|Religion & Spirituality[22]|Christianity[12290]|Clergy[12360]|Sermons[12370]
reviews: total: 2 downloaded: 2 avg rating: 5
2000-7-28 cutomer: A2JW67OY8U6HHK rating: 5 votes: 10 helpful: 9
2003-12-14 cutomer: A2VE83MZF98ITY rating: 5 votes: 6 helpful: 5
最佳答案
您可以尝试使用R
- 使用
readLines
读取文件 - 使用
paste
创建一个模式,使用grep
对行进行子集
将“lines1”拆分
到一个列表
中,其中列表元素是每个前缀
组。在split
之前,我使用sub
删除了:
的LHS
和RHS
。cbind
使用do.call(cbind
) 列表元素并将其转换为data.frame
- 这将返回
character
类的列。不清楚哪一个应该是字符/数字
注意:我创建了两条记录只是为了重现该问题。
lines <- readLines('file.txt')
pat <- paste0(c('Id', 'ASIN', 'group', 'salesrank', 'categories'),
':', collapse='|')
lines1 <- lines[grep(pat, lines)]
val <- str_trim(sub(".*:", "", lines1))
Grp <- sub(":.*", '', lines1)
library(stringr)
res <- do.call(cbind,split(val,Grp))
res1 <- as.data.frame(res,stringsAsFactors=FALSE)
res1
# ASIN categories group Id salesrank
#1 0827229534 2 Book 1 396585
#2 0827529534 3 Book2 2 396587
关于python - 使用 R 或 Python 对数据进行子集化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27791358/