在路径分隔符处停止substr?

时间:2017-12-15 20:48:40

标签: r csv subset substr

我想根据文件路径的特定部分命名文件。 是否可以在路径分隔符处设置子站点?

例如,我想要一个输出文件来读取" worldclim.csv"

如果我从这条路径中提取数据:" F:\ Data \ WorldClim \ masked \ Africa" 我希望输出文件命名为:" worldclim.csv"

以下是一个例子:

(file.out <- runif(4))
(path <- "F:\\Data\\WorldClim\\masked\\Africa")
(pname <- sapply(path, function(x) substr(x,start=9,stop=17)))
write.csv(file.out, paste0("F:\\Data\\extractions\\", pname, ".csv"), row.names=F)

但是,我需要为许多目录执行此操作,以及&#34; Data&#34;中的子目录。有不同的字符长度。

简而言之,我想&#34; file.out&#34;以Data后面的目录命名。 有任何想法吗?

2 个答案:

答案 0 :(得分:2)

我想你可以简单地分开\\

strsplit(path, '\\\\')[[1]][3]
# [1] "WorldClim"

# or

strsplit(path, '\\', fixed = TRUE)[[1]][3]
# [1] "WorldClim"

或使用regex匹配开始时的8个字符,然后将模式提取到下一个\\

sub('^.{8}([^\\]+).*$', '\\1', path)
# [1] "WorldClim"

答案 1 :(得分:1)

只是为了说明basenamepath <- file.path("F:", "Data", "WorldClim", "masked", "Africa") basename(dirname(dirname((path)))) # [1] "WorldClim"

split_path <- function(x) {
  if (dirname(x) == x) x else c(basename(x), split_path(dirname(x)))
}
splitPath <- function(x) rev(split_path(x))
splitPath(path)[4]
# [1] "WorldClim"

这个answer为分割路径提供了很好的功能。然后,您可以对您想要的任何文件夹的索引进行子集化。我把它包装在一个附加函数中(因为原始函数是递归的),以正确的顺序输出到输出。

public function user_has_submitted_in_dog_category() {

    return $this->user_has_submitted_in_animal_category( 'dog' );

}