Regex 将由多个分隔符定义的字符串部分拆分为分隔符中的多个变量
我有一个大的文件名列表,我需要使用R从中提取信息。信息由多个破折号和下划线分隔。我很难找到一种方法来适应分隔符之间的字符数不一致这一事实(信息的顺序将保持不变,使用的分隔符也是一样(希望如此)) 例如:Regex 将由多个分隔符定义的字符串部分拆分为分隔符中的多个变量,regex,r,string,split,Regex,R,String,Split,我有一个大的文件名列表,我需要使用R从中提取信息。信息由多个破折号和下划线分隔。我很难找到一种方法来适应分隔符之间的字符数不一致这一事实(信息的顺序将保持不变,使用的分隔符也是一样(希望如此)) 例如: f <- data.frame(c("EI-SM4-AMW11_20160614_082800.wav", "PA-RF-A50_20160614_082800.wav"), stringsAsFactors = FALSE) colnames(f)<-"filename" f
f <- data.frame(c("EI-SM4-AMW11_20160614_082800.wav", "PA-RF-A50_20160614_082800.wav"), stringsAsFactors = FALSE)
colnames(f)<-"filename"
f$area <- str_sub(f$filename, 1, 2)
f$rec <- str_sub(f$filename, 4, 6)
f$site <- str_sub(f$filename, 8, 12)
f从“tidyr”软件包中尝试以下操作:
library(tidyr)
f %>% separate(filename, c('area', 'rec', 'site'), sep = '-')
您还可以沿多个差值Delimeter拆分,如下所示:
f %>% separate(filename, c('area', 'rec', 'site', 'date', 'don_know_what_this_is', 'file_extension'), sep = '-|_|\\.')
然后使用dplyr
的select
功能仅保留所需的列:
library(dplyr)
library(tidyr)
f %>%
separate(filename,
c('area', 'rec', 'site', 'date',
'don_know_what_this_is', 'file_extension'),
sep = '-|_|\\.') %>%
select(area, rec, site)
大概是这样的:
library(stringr)
library(dplyr)
f$area <- word(f$filename, 1, sep = "-")
f$rec <- word(f$filename, 2, sep = "-")
f$site <- word(f$filename, 3, sep = "-") %>%
word(1,sep = "_")
库(stringr)
图书馆(dplyr)
默认情况下,f$areaseparate
按任何分隔符拆分(请注意,如果在第二个示例中未定义分隔符,会发生什么情况),并删除超出定义的新列数的任何“额外”部分,因此无需执行第二个select
步骤。要保留原始列,请参见remove=FALSE
。感谢RoyalTS-我没有想到使用tidyr完成此任务,但此解决方案非常有效。我确实使用了aosmith的建议,不定义分隔符,这使得解决方案对于在文件前缀中添加奇怪内容的人来说更加健壮。(请注意,文件扩展名之前的最后一个块是hhmmss中的时间)自然语言中没有与这两种方法匹配的描述。您有两个破折号实例和两个下划线实例,您只需要两个或三个项目。描述你所做的,而不是展示失败的代码。
library(stringr)
library(dplyr)
f$area <- word(f$filename, 1, sep = "-")
f$rec <- word(f$filename, 2, sep = "-")
f$site <- word(f$filename, 3, sep = "-") %>%
word(1,sep = "_")