将dplyr mutate函数与搜索整个表结合起来

将dplyr mutate函数与搜索整个表结合起来,r,tidyverse,R,Tidyverse,我对R很陌生,尤其是对整洁的诗句。我想写一个脚本,用它我们可以重写分类单元列表。我们已经有一个使用了很多for和if循环,我想尝试用tidyverse来简化它,但我有点被困在如何做到这一点上 我有一张看起来像那样的桌子(非常简单) 我尝试将mutate与ifelse语句结合起来,但这只是将NA添加到整个order列中 tibble被命名为分类单元列表 taxon_list %>% mutate(order = ifelse(parent_ID == Id, Name, NA)

我对R很陌生,尤其是对整洁的诗句。我想写一个脚本,用它我们可以重写分类单元列表。我们已经有一个使用了很多for和if循环,我想尝试用tidyverse来简化它,但我有点被困在如何做到这一点上

我有一张看起来像那样的桌子(非常简单)

我尝试将mutate与ifelse语句结合起来,但这只是将NA添加到整个order列中

tibble被命名为分类单元列表

taxon_list %>%    
   mutate(order = ifelse(parent_ID == Id, Name, NA))

我知道这是行不通的,因为它不会在整个数据集中搜索正确的行(这是我之前使用alle for循环所做的)。也许有人能给我指出正确的方向?

一种方法是对每个列组类型进行
筛选
以获得2个单独的dfs,使用
选择子集
,然后
合并
2个

  df <- tibble(name = c( "cockroach","cockroach2", "grasshopper", "spider",    "lobster",  "insect",   "crustacea",    "arachnid"), 
                  Id = c(445,448,446,778,543,200,400,300),
                  parent_ID = c(200,200,200,300,400,200,400,300),
                  rank = c("genus","genus","genus","genus","genus","order","order","order"))     

library(tidyverse)

df_order <- df %>%
  filter(rank == "order") %>% 
  select(order = name, parent_ID)

df_genus <- df %>%
  filter(rank == "genus") %>% 
  select(name, Id, parent_ID) %>% 
  merge(df_order, by = "parent_ID")

一种方法是对每个列组类型进行
筛选
,以获得两个单独的dfs,使用
选择子集
,然后
合并这两个dfs

  df <- tibble(name = c( "cockroach","cockroach2", "grasshopper", "spider",    "lobster",  "insect",   "crustacea",    "arachnid"), 
                  Id = c(445,448,446,778,543,200,400,300),
                  parent_ID = c(200,200,200,300,400,200,400,300),
                  rank = c("genus","genus","genus","genus","genus","order","order","order"))     

library(tidyverse)

df_order <- df %>%
  filter(rank == "order") %>% 
  select(order = name, parent_ID)

df_genus <- df %>%
  filter(rank == "genus") %>% 
  select(name, Id, parent_ID) %>% 
  merge(df_order, by = "parent_ID")

你好有几件事;确保提供可复制的示例。您可以使用
dput(head(您的_-df))
来实现这一点。还有,你是什么意思?在您的示例中,Parent_ID不等于任何
ID
,但您仍然拥有
订单
栏谢谢您的回复。我编辑了一点原始帖子,希望它能解释得更多一些。我现在有一个可行的解决方案。你好。有几件事;确保提供可复制的示例。您可以使用
dput(head(您的_-df))
来实现这一点。还有,你是什么意思?在您的示例中,Parent_ID不等于任何
ID
,但您仍然拥有
订单
栏谢谢您的回复。我编辑了一点原始帖子,希望它能解释得更多一些。我现在有一个可行的解决办法。
  df <- tibble(name = c( "cockroach","cockroach2", "grasshopper", "spider",    "lobster",  "insect",   "crustacea",    "arachnid"), 
                  Id = c(445,448,446,778,543,200,400,300),
                  parent_ID = c(200,200,200,300,400,200,400,300),
                  rank = c("genus","genus","genus","genus","genus","order","order","order"))     

library(tidyverse)

df_order <- df %>%
  filter(rank == "order") %>% 
  select(order = name, parent_ID)

df_genus <- df %>%
  filter(rank == "genus") %>% 
  select(name, Id, parent_ID) %>% 
  merge(df_order, by = "parent_ID")
  parent_ID        name  Id     order
1       200   cockroach 445    insect
2       200  cockroach2 448    insect
3       200 grasshopper 446    insect
4       300      spider 778  arachnid
5       400     lobster 543 crustacea