微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果大数据集R中的物种名称不同,如何保留名称的第一部分

如何解决如果大数据集R中的物种名称不同,如何保留名称的第一部分

我必须清理 R 中的数据表,但我卡在了一个点上

我正在搜索如何通过保留物种名称的第一部分(在“_”之前并添加“.sp”)(如果它不具体)来在表格中具体化。

如果我给你举个例子会更好:

我有一张这样的桌子:

reads |            species
ST311 | cylindrotheca_closterium 
ST311  | cylindrotheca_fusiformis
ST311  | cylindrotheca_fusiformis
ST311 | cylindrotheca_fusiformis
ST311  | cylindrotheca_closterium
ST312 | alexandrium_minutum
ST317 |pseudo.nitzschia_australis

最后,我只需要同一个读段和同一个属是否有不同的物种,例如这里是圆柱体:对于这个读段的所有物种“ST311”,输入:“cylindrotheca_sp”。

如果读取是特定的,例如 ST312 for alexandrium minutum 和 ST317 for pseudonitzschia australis,我想保留它。

这是我想要的桌子:

reads |            species
ST311 | cylindrotheca_sp 
ST311  | cylindrotheca_sp
ST311  | cylindrotheca_sp
ST311 | cylindrotheca_sp
ST311  | cylindrotheca_sp
ST312 | alexandrium_minutum
ST317 |pseudo.nitzschia_australis

我是这么想的:(我知道这是错的……但有这个想法)

TEST <-prim51test %>% 
  group_by(read) %>%
  if(species > 1){
  print == "*_sp"
  }

我有一个包含很多不同物种的大数据集)

我怎么能这样做?

感谢您的帮助

解决方法

您可以使用 sub 删除下划线后的所有内容并替换为 '_sp'

df$new_species <- sub("_.*","_sp",df$species)
df

#  reads                  species      new_species
#1 ST311 cylindrotheca_closterium cylindrotheca_sp
#2 ST311 cylindrotheca_fusiformis cylindrotheca_sp
#3 ST311 cylindrotheca_fusiformis cylindrotheca_sp
#4 ST311 cylindrotheca_fusiformis cylindrotheca_sp
#5 ST311 cylindrotheca_closterium cylindrotheca_sp

对于更新的条件,您可以尝试:

library(dplyr)

df %>%
  add_count(reads) %>%
  mutate(species = ifelse(n > 1,sub("_.*",species),species)) %>%
  select(-n) -> df
df

#  reads                   species
#1 ST311          cylindrotheca_sp
#2 ST311          cylindrotheca_sp
#3 ST311          cylindrotheca_sp
#4 ST311          cylindrotheca_sp
#5 ST311          cylindrotheca_sp
#6 ST312       alexandrium minutum
#7 ST314 pseudonitzschia_australis

数据

df <- structure(list(reads = c("ST311","ST311","ST311"),species = c("cylindrotheca_closterium","cylindrotheca_fusiformis","cylindrotheca_closterium"
)),class = "data.frame",row.names = c(NA,-5L))
,

如果我理解正确,您想为每个阅读替换后缀唯一的物种的名称(即后缀)。

起初,您可以使用 gsub 在 pre 和 suffices 上创建一个表格。这在这里给出了一个 3x2x2 数组 A,我们使用 > 1 将其转换为逻辑类。从 colSums cs 中,我们想知道每列 rownames 中的哪一个具有值 1。给出一个命名匹配向量 m,我们通过一个 Mapreadsspecies 上发送,我们将匹配的后缀替换为 {{1 }} 使用 "_sp"

<<-

数据:

注意:我随意扩展数据以准备代码以获得最佳可扩展性。

A <- with(d,table(gsub(".*_","",gsub("_.*",reads)) > 1
(cs <- colSums(A,3))
#              reads
#               ST311 ST312
# ceratoneis        1     0
# cylindrotheca     2     1
m <- apply(cs,2,function(x) rownames(cs)[which(x == 1)])
invisible(Map(function(i,j) {
  d$species[d$reads %in% i & grepl(j,d$species)] <<- paste0(j,"_sp")
  },names(m),m))
d
#    reads                  species
# 1  ST311 cylindrotheca_closterium
# 2  ST311 cylindrotheca_fusiformis
# 3  ST311 cylindrotheca_fusiformis
# 4  ST311 cylindrotheca_fusiformis
# 5  ST311 cylindrotheca_closterium
# 6  ST311            ceratoneis_sp
# 7  ST311            ceratoneis_sp
# 8  ST312     ceratoneis_reimannii
# 9  ST312         cylindrotheca_sp
# 10 ST312    ceratoneis_closterium
# 11 ST312         cylindrotheca_sp
# 12 ST312         cylindrotheca_sp

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。