在R中缩短我的列值的一些名称

ttisahbt  于 12个月前  发布在  其他
关注(0)|答案(4)|浏览(150)

我有一个数据框与物种列表,然而,在某些情况下,我的物种名称很短(例如,“筋骨草reptans”),但有时我有亚种名称(如“Agrostis capillaris vinealis”或也“Allium senescens ssp montanum”).我正在寻找一种方法来缩短我所有物种的名称,从:

species
1  Ajuga reptans
2  Agrostis capillaris vinealis
3  Allium senescens ssp  montanum

字符串

species
1  Ajuga reptans
2  Agrostis capillaris 
3  Allium senescens


所以,删除我的物种的结束名称,只有当我的“物种名称”大于两个字。
有什么建议吗?我尝试使用gsub,但不成功。

gcxthw6b

gcxthw6b1#

你可以使用stringr::word-

df$species <- stringr::word(df$species, 1, 2)
df

#              species
#1       Ajuga reptans
#2 Agrostis capillaris
#3    Allium senescens

字符串

4dc9hkyq

4dc9hkyq2#

sub('(\\w+ \\w+).*', '\\1', df$species)

字符串
使用上述方法,您可以执行以下操作:

df$spec2 <- sub('(\\w+ \\w+).*', '\\1', df$species)
df
                         species               spec2
1                  Ajuga reptans       Ajuga reptans
2   Agrostis capillaris vinealis Agrostis capillaris
3 Allium senescens ssp  montanum    Allium senescens
>

px9o7tmv

px9o7tmv3#

另一种方式是

sapply(df$species, 
       function(i) paste(unlist(strsplit(i, " "))[1:2], collapse = " ")) -> df$species2

字符串
这将产生以下结果:

#                          species            species2
# 1                  Ajuga reptans       Ajuga reptans
# 2   Agrostis capillaris vinealis Agrostis capillaris
# 3 Allium senescens ssp  montanum    Allium senescens

xfb7svmp

xfb7svmp4#

在base R中使用abbreviate()函数。这就是它的设计目的。

相关问题