【问题标题】:How to separate strings to have required part in R?如何分隔字符串以在 R 中具有所需的部分?
【发布时间】:2023-01-20 19:37:43
【问题描述】:

我使用以下代码创建了一个list.files

#Make a list of the files
files <- list.files(path="E:\\ICAR PDF\\Data\\Tridip\\Desktop\\TSEB", 
                    pattern=glob2rx("*.tif$*"), full.names=TRUE)

files

 [1] "E:\\ICAR PDF\\Data\\Tridip\\Desktop\\TSEB/TSEB_03.APR.2022_ET.tif"
 [2] "E:\\ICAR PDF\\Data\\Tridip\\Desktop\\TSEB/TSEB_03.MAR.2022_ET.tif"
 [3] "E:\\ICAR PDF\\Data\\Tridip\\Desktop\\TSEB/TSEB_04.DEC.2021_ET.tif"
 [4] "E:\\ICAR PDF\\Data\\Tridip\\Desktop\\TSEB/TSEB_06.FEB.2022_ET.tif"
 [5] "E:\\ICAR PDF\\Data\\Tridip\\Desktop\\TSEB/TSEB_10.MAR.2022_ET.tif"
 [6] "E:\\ICAR PDF\\Data\\Tridip\\Desktop\\TSEB/TSEB_11.APR.2022_ET.tif"
 [7] "E:\\ICAR PDF\\Data\\Tridip\\Desktop\\TSEB/TSEB_13.DEC.2021_ET.tif"
 [8] "E:\\ICAR PDF\\Data\\Tridip\\Desktop\\TSEB/TSEB_15.FEB.2022_ET.tif"
 [9] "E:\\ICAR PDF\\Data\\Tridip\\Desktop\\TSEB/TSEB_18.NOV.2021_ET.tif"
[10] "E:\\ICAR PDF\\Data\\Tridip\\Desktop\\TSEB/TSEB_19.MAR.2022_ET.tif"
[11] "E:\\ICAR PDF\\Data\\Tridip\\Desktop\\TSEB/TSEB_20.DEC.2021_ET.tif"
[12] "E:\\ICAR PDF\\Data\\Tridip\\Desktop\\TSEB/TSEB_22.FEB.2022_ET.tif"
[13] "E:\\ICAR PDF\\Data\\Tridip\\Desktop\\TSEB/TSEB_26.MAR.2022_ET.tif"
[14] "E:\\ICAR PDF\\Data\\Tridip\\Desktop\\TSEB/TSEB_30.JAN.2022_ET.tif"

现在我只想提取所有 14 行的 TSEB_03.APR.2022_ET 部分(第 7 部分)并像下面这样

c("TSEB_03.APR.2022_ET", "TSEB_03.MAR.2022_ET", "TSEB_04.DEC.2021_ET", 
  "TSEB_06.FEB.2022_ET", "TSEB_10.MAR.2022_ET", "TSEB_11.APR.2022_ET", 
  "TSEB_13.DEC.2021_ET", "TSEB_15.FEB.2022_ET", "TSEB_18.NOV.2021_ET", 
  "TSEB_19.MAR.2022_ET", "TSEB_20.DEC.2021_ET", "TSEB_22.FEB.2022_ET", 
  "TSEB_26.MAR.2022_ET", "TSEB_30.JAN.2022_ET")

我该怎么做?

【问题讨论】:

  • 也许放弃路径? list.files(path="E:\\ICAR PDF\\Data\\Tridip\\Desktop\\TSEB", pattern=glob2rx("*.tif$*"))

标签: r string


【解决方案1】:

您可以使用basename + gsub

x <- c("E:\ICAR PDF\Data\Tridip\Desktop\TSEB/TSEB_03.APR.2022_ET.tif",
  "E:\ICAR PDF\Data\Tridip\Desktop\TSEB/TSEB_03.MAR.2022_ET.tif")

gsub("\.tif$", "", basename(x))
#[1] "TSEB_03.APR.2022_ET" "TSEB_03.MAR.2022_ET"

【讨论】:

  • . 应该是 \.,为了最大限度地防御,我会使用表达式 \.tif$。或者tools::file_path_sans_ext,但是那个函数其实是不建议因为它是越野车。
  • @UseR10085 是的,所以?
  • @KonradRudolph 好点,我编辑了
  • 它工作正常。
【解决方案2】:

来自 stringrstr_extract 的另一个解决方案:

library(stringr)
x <- c("E:\ICAR PDF\Data\Tridip\Desktop\TSEB/TSEB_03.APR.2022_ET.tif",
   "E:\ICAR PDF\Data\Tridip\Desktop\TSEB/TSEB_03.MAR.2022_ET.tif")

str_extract(x, "(?<=\/)(.*)(?=.tif)")

输出:

[1] "TSEB_03.APR.2022_ET" "TSEB_03.MAR.2022_ET"

【讨论】:

  • 你能详细说明"(?&lt;=\/)(.*)(?=.tif)"部分吗?哪个符号用于什么目的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-27
  • 2010-10-13
  • 1970-01-01
  • 1970-01-01
  • 2017-04-29
  • 2021-08-25
相关资源
最近更新 更多