如何为多个list.files提取R中“ /”之前的路径?

时间:2019-01-04 13:31:51

标签: r substring character strsplit

假设我有一个在R中使用 list.files()获得的下一个向量:

paths <- c("/home/user/myfolder/ERA/amsterdam/amsterdam1.nc", "/home/user/myfolder/ERA/amsterdam/amsterdam2.nc", 
       "/home/user/myfolder/CLMcom/HadCruz/run1/paris/paris1.nc", "/home/user/myfolder/CLMcom/HadCruz/run1/paris/paris2.nc",
       "/home/user/myfolder/CNRM/CLMcom/rcp85/run1/helsinki/helsinki1.nc")

nchar(paths)
[1] 47 47 55 55 63

如您所见,向量路径确实具有不同大小的对象。

我想使用路径中的所有对象但不使用内部文件名来获取新矢量,例如:

> new_paths
[1] "/home/user/myfolder/ERA/amsterdam/"                   
"/home/user/myfolder/ERA/amsterdam/"                  
[3] "/home/user/myfolder/CLMcom/HadCruz/run1/paris/"       
"/home/user/myfolder/CLMcom/HadCruz/run1/paris/"      
[5] "/home/user/myfolder/CNRM/CLMcom/rcp85/run1/helsinki/"

我需要这个,因为我想创建一个循环,其中对于向量new_paths中的每个 i ,我将使用 system

运行终端命令

我知道 strsplit 有可能,但是,我不是R中操作文件名的专家。请问有人知道这种可能性吗?

2 个答案:

答案 0 :(得分:4)

为此,您可以直接使用功能dirname

dirname(paths)

#[1] "/home/user/myfolder/ERA/amsterdam"                  
#[2] "/home/user/myfolder/ERA/amsterdam"                  
#[3] "/home/user/myfolder/CLMcom/HadCruz/run1/paris"      
#[4] "/home/user/myfolder/CLMcom/HadCruz/run1/paris"      
#[5] "/home/user/myfolder/CNRM/CLMcom/rcp85/run1/helsinki"

答案 1 :(得分:3)

您可以使用gsub()替换字符串中的模式。通过将替换设置为空字符串,您可以有效地从字符串中删除匹配项。所以

gsub(x = paths, pattern = "[^/]+$", replacement = "")

将删除最后一个/之后的路径的最后一部分。正则表达式"[^/]+$"与直到字符串末尾的/都匹配。然后,我们将匹配项替换为""