R:根据数据集属性将科分配给物种

问题描述 投票:0回答:1

我有一个包含数千行和以下列的数据集:ID、parentID、rank 和 ScientificName。

我希望创建一个新列,用于告知给定物种所属的familyrank中的级别)。如果有人可以提供帮助,将不胜感激。

示例数据:

ID = c('f1','f2','g1','g2','g3','g4','s1','s2','s3','s4','s5','s6') # all unique
parentID = c(NA,NA,'f1','f1','f2','f2','g1','g1','g2','g3','g3','g4')
rank = c('family','family','genus','genus','genus','genus','species','species','species','species','species','species')
scientificName = c('FamA','FamB','GenA','GenB','GenC','GenD','SpA','SpB','SpC','SpD','SpE','SpF')
dat = data.frame( ID, parentID, rank, scientificName)

我想要的输出(在本例中)将是一个额外的列,通知家庭如下: 家庭 = c('famA','famB','famA','famA','famB','famB','famA','famA','famA','famB','famB','famB ')

我考虑过创建家族及其 ID 的向量,然后通过家族名称更改 ParentID 列中的代码,然后尝试对属进行类似的操作,最终将家族信息与每个物种“链接”起来,但它有点混乱最后(也就是说,它没有成功)。我认为我需要的可以通过“dplyr”包来完成,但我被困住了......再次,我将不胜感激任何帮助。

r dplyr plyr
1个回答
0
投票
library(dplyr)
library(purrr)

get_family <- function(x) {
  i <- match(x, dat$ID)
  if (dat$rank[i] == "family") {
    return(dat$scientificName[i])
    } else {
      get_family(dat$parentID[i])
    }
}

dat |>
  mutate(family = map_chr(ID, get_family))
© www.soinside.com 2019 - 2024. All rights reserved.