我想改变不同植物种类分布的不同地图文件的名称.
现在他们有物种的全名,如:
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中这样做?
这可能很有用
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)
你可以用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)