如何在R中更改多个文件名

1 r file

我想改变不同植物种类分布的不同地图文件的名称.

现在他们有物种的全名,如:

Amaranthus australis.kml
Capsicum annuum.kml
Cucurbita moschata.kml
Ipomoea alba.kml
Persea donnell-smithii.kml
Run Code Online (Sandbox Code Playgroud)

我想用每个单词的前3个字符来命名它们,如下所示:

ama_aus.kml
cap_ann.kml
cuc_mos.kml
ipo_alb.kml
Per_don.kml
Run Code Online (Sandbox Code Playgroud)

有谁知道如何在R中这样做?

Jil*_*ina 6

这可能很有用

Names <- c("Amaranthus australis.kml",
           "Capsicum annuum.kml",
           "Cucurbita moschata.kml",
           "Ipomoea alba.kml",
           "Persea donnell-smithii.kml")

sapply (lapply(strsplit(tolower(Names), " "), substr, 1, 3), 
        function(x) paste(paste(x[1], x[2], sep="_"),"kml", sep="."))
[1] "ama_aus.kml" "cap_ann.kml" "cuc_mos.kml" "ipo_alb.kml" "per_don.kml"
Run Code Online (Sandbox Code Playgroud)


GSe*_*See 5

你可以用paste和做substr

lines <- 'Amaranthus australis.kml
Capsicum annuum.kml
Cucurbita moschata.kml
Ipomoea alba.kml
Persea donnell-smithii.kml'

x <- read.table(text=lines, as.is=TRUE)

paste(tolower(substr(x[, 1], 1, 3)), 
      paste(substr(x[, 2], 1, 3), tools::file_ext(x[, 2]), sep="."),
      sep="_")
# [1] "ama_aus.kml" "cap_ann.kml" "cuc_mos.kml" "ipo_alb.kml" "per_don.kml"
Run Code Online (Sandbox Code Playgroud)

编辑: 这是一种使用正则表达式的方法,但我喜欢另一种方式更好,因为看起来它会有更少的边缘情况.

text <- strsplit(lines, "\n")[[1]]
tolower(sub("^(\\w{3})\\w* (\\w{3})[A-Za-z-]+\\.(kml)$", "\\1_\\2.\\3", text))
Run Code Online (Sandbox Code Playgroud)