我有一个数据框,其中包含一个带有常规部分的文件名。我使用正则表达式来解析这个文件名并将每个部分存储在它自己的列中。
parse.file.name <- function(file.name="cc-nolabel-AEMNZ334_0009-loc-1317-407-6-39.png")
{
rfn <- regexec(pattern="cc-(.+?)-(.+?)-loc-(.+?)-(.+?)-(.+?)-(.+?)\\.png", text=file.name)
matchfn <- regmatches(file.name, rfn)
return(matchfn)
}
basic.features$parsed.filename <- parse.file.name(as.character(basic.features$filename))
filename
包含类似于默认参数的值。我正在检索每列的各个值,如下所示:
basic.features$label <- unlist(lapply(basic.features$parsed.filename,
function(pf) {
return(unlist(pf)[2]) } ))
我觉得这不是一种优雅的方式,但无法轻松地从包含每行列表的数据框列中获取单个值。有一个更好的方法吗?
如果您喜欢示例数据:
basic.features <- data.frame(filename=c("cc-nolabel-AEMNZ336_0009-loc-1003-1504-7-8.png", "cc-nolabel-AEMNZ335_0006-loc-1979-880-13-10.png", "cc-nolabel-AEMNZ333_0007-loc-941-263-8-8.png", "cc-nolabel-AEMNZ336_0014-loc-2011-24-4-4.png", "cc-nolabel-AEMNZ335_0013-loc-2087-644-66-41.png", "cc-nolabel-AEMNZ333_0013-loc-1531-374-12-23.png"))