好吧,我的问题是,我有一个数据框,其中的列具有这样的物种名称:
我只是想剪掉这样的属名:
我的问题不是字符串处理。我只是想不通如何简单地使用如下所示的函数:
truncateGenusName <- function(x){
genus <- str_sub(x, 1, 1)
posOfSpace <- str_locate(x, " ")[1]
epitheton <- str_sub(x, posOfSpace, str_length(x))
paste0(genus, '. ', epitheton)
}
我试图像这样调用函数:
mutate(data, species = replace (species, TRUE, truncateGenusName(species)))
该调用的问题在于,不是单个字符串传递给函数,而是传递给列表。
我想我的方法太复杂了。也许有人有捷径吗?
下面是一个使用的解决方案dplyr
,tidyr
以及stringr
。
separate
来自tidyr
软件包的用来将names
列变成两个新列genus
和species
。
str_trunc
从stringr
软件包中截断genus
列中的字符串。请注意,默认设置是应用三个省略号,指示字符串已被截断。使用ellipsis = "."
默认的替代仅显示1个椭圆。
paste
具有default sep = " "
,所以paste0
在我看来,它是更好的选择。
library(tibble) # Used to create a reproducible example.
library(dplyr)
library(tidyr)
library(stringr)
# create a reproducible example dataset using the tibble package.
df <- tibble(
names = c("Genus1 species1",
"Genus1 species2",
"Genus1 species3")
)
# code to format the names column.
df %>%
separate(names, c("genus", "species"), sep = " ") %>%
mutate(genus = str_trunc(genus, 2, ellipsis = ".")) %>%
mutate(
genus_species = paste(genus, species)
) %>%
rename(names = genus_species) %>%
select(names)
# output table
#> # A tibble: 3 x 1
#> names
#> <chr>
#> 1 G. species1
#> 2 G. species2
#> 3 G. species3
由reprex软件包(v0.3.0)创建于2020-11-19
原始表格:
#> # A tibble: 3 x 1
#> names
#> <chr>
#> 1 Genus1 species1
#> 2 Genus1 species2
#> 3 Genus1 species3
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句