如何将长名称转换为短名称(两部分)

Den*_*mov 3 r

我有一个字符矢量,其中使用了长名称,它由几个以点号形式由定界符连接的单词组成。

x <- c("Duschekia.fruticosa..Rupr...Pouzar",
       "Betula.nana.L.",
       "Salix.glauca.L.",
       "Salix.jenisseensis..F..Schmidt..Flod.",
       "Vaccinium.minus..Lodd...Worosch")
Run Code Online (Sandbox Code Playgroud)

名称的长度不同。但是,仅全名的前两个字很重要。

我的目标是获得最多7个符号的名称:前两个单词中包含3个初始符号,并在它们之间以“点”的形式分隔。

这些示例非常接近我的要求,但是我不知道如何将这些代码变体应用于我的案例。 R如何从数据框中的长列名称中删除字符,以及 如何在R中的输出数据框的“列名称”中附加名称?

我应该怎么做才能使出口名称看起来像这样?

x <- c("Dus.fru",
       "Bet.nan",
       "Sal.gla",
       "Sal.jen",
       "Vac.min")
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激。

kat*_*ath 8

您可以执行以下操作:

gsub("(\\w{1,3})[^\\.]*\\.(\\w{1,3}).*", "\\1.\\2", x)
# [1] "Dus.fru" "Bet.nan" "Sal.gla" "Sal.jen" "Vac.min"
Run Code Online (Sandbox Code Playgroud)

首先,我们最多匹配3个字符(\\w{1,3}),然后忽略不是点的任何内容[^\\.]*,匹配一个点\\.,然后再次匹配3个字符(\\w{1,3})。最后,那之后是什么.*。然后,我们仅使用方括号中的内容并将它们用点分隔\\1.\\2。