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