Regex 通过解析R中的字符向量来构建数据帧
我是R的新手,正在努力从博物馆的藏品中构建数据集 在抓取他们的网站后,我有一个字符向量列表,比如说名称是特征,其中每个元素如下所示:Regex 通过解析R中的字符向量来构建数据帧,regex,r,Regex,R,我是R的新手,正在努力从博物馆的藏品中构建数据集 在抓取他们的网站后,我有一个字符向量列表,比如说名称是特征,其中每个元素如下所示: [[4729]] [1] " Date://2002 Medium://Pencil on paper Dimensions://22 1/2 x 30 1/8\" (57.2 x 76.5 cm) Credit Line://The Judith Rothschild Foundation Contemporary Drawings Collection Gif
[[4729]]
[1] " Date://2002 Medium://Pencil on paper Dimensions://22 1/2 x 30 1/8\" (57.2 x 76.5 cm) Credit Line://The Judith Rothschild Foundation Contemporary Drawings Collection Gift MoMA Number://1563.2005 Copyright://© 2015 Steve DiBenedetto"
year medium dimensions credit line number
1 2002 Pencil on paper etc...
根据这些向量,我想制作一个如下所示的数据帧:
[[4729]]
[1] " Date://2002 Medium://Pencil on paper Dimensions://22 1/2 x 30 1/8\" (57.2 x 76.5 cm) Credit Line://The Judith Rothschild Foundation Contemporary Drawings Collection Gift MoMA Number://1563.2005 Copyright://© 2015 Steve DiBenedetto"
year medium dimensions credit line number
1 2002 Pencil on paper etc...
然而,我似乎无法设法从字符向量中减去必要的数据,因为我正在努力使用正则表达式来做到这一点。我们的想法是在Date://之后和Medium://之前获取数据。更复杂的是,并非列表中的每个元素都具有相同顺序的相同特征,例如,一些元素只有日期和介质,而其他元素包括版本://、通过://获取等
只需保存每个列表元素的前4位数字,就可以很容易地编制年份列表:
year <- list()
for(p in 1:length(characteristics)) {
string <- as.character(characteristics[p])
year <- c(year, str_extract(string, "\\d\\d\\d\\d"))
}
这可能不是最快的方法,但它做得很好。
但是,我完全无法从列表中提取其他变量。也许旧的read.table也是一个选项:
txt <- c("Date://2002 Medium://Pencil on paper Dimensions://22 1/2 x 30 1/8\" (57.2 x 76.5 cm) Credit Line://The Judith Rothschild Foundation Contemporary Drawings Collection Gift MoMA Number://1563.2005 Copyright://© 2015 Steve DiBenedetto",
"Date://2002 Medium://Pencil on paper Dimensions://22 1/2 x 30 1/8\" (57.2 x 76.5 cm) Credit Line://The Judith Rothschild Foundation Contemporary Drawings Collection Gift MoMA Number://1563.2005 Copyright://© 2015 Steve DiBenedetto")
read.table(text = gsub("( Credit)?\\s?[A-z]+://", "\t", txt), sep = "\t", quote = "", col.names = letters[1:7])[-1]
# b c d e f g
# 1 2002 Pencil on paper 22 1/2 x 30 1/8" (57.2 x 76.5 cm) The Judith Rothschild Foundation Contemporary Drawings Collection Gift MoMA 1563.2 © 2015 Steve DiBenedetto
# 2 2002 Pencil on paper 22 1/2 x 30 1/8" (57.2 x 76.5 cm) The Judith Rothschild Foundation Contemporary Drawings Collection Gift MoMA 1563.2 © 2015 Steve DiBenedetto
是否允许使用awk或其他方法进行预处理?您可以提取字符串,然后使用gsub删除第一个匹配部分。。每个步骤都匹配此正则表达式:[a-zA-Z]*:\/\/\[^\/]*\[a-zA-Z]*\/\/。请注意,此正则表达式使用sed语法。有一个组捕获,其中包含您想要的信息,请使用\1或\\1我相信R访问它。您知道特征范围的可用选项吗?这正接近@lukeA!但是,一些问题仍然存在:我们丢失了有关正在保存的特征的信息,例如介质。不同的艺术品有不同的特征,所以我应该能够将特征保存在正确的列名下。因此,我们存储的信息应该存储在一个名为的列中,该列的字符串位于://例如medium之前。我没有像这里提到的@Anando Mahto那样列出一系列特征。每当我们在://前面遇到一个新标记时,都应该使用该名称创建一个新列。