通过过滤、分组然后根据语句条件重命名因子级别

标签 r tidyverse

我有一个像这样的数据框:

 data<- data.frame(ID= seq(1,12, 1), 
                   plantfam= c(1,1,2,2,1,1,1,1,2,2,3,3), 
                   lepsp= c(rep("A", 4), "B", "B", rep("C", 6)), 
                   needsmorpho= c(rep("yes", 4),"no", "no", rep("yes", 6)))

我需要首先过滤所有 needsmorphoyes 的内容。然后我需要将所有 lepsp 与相同的 plantfam 分组。对于每个唯一的 lepspplantfam 匹配,lepsp 将被赋予一个唯一的形态物种名称。为了创建 morphosp 名称,我想粘贴 morphosp 和基于唯一 lepspplantfam 匹配的唯一编号。输出将是:

output<- data.frame(ID= seq(1,12, 1), 
                   plantfam= c(1,1,2,2,1,1,1,1,2,2,3,3), 
                   lepsp= c("A_morpho1","A_morpho1","A_morpho2","A_morpho2",
                         "B","B","C_morpho1","C_morpho1",
                         "C_morpho2","C_morpho2","C_morpho3","C_morpho3"), 
                   needsmorpho= c(rep("yes", 4),"no", "no", rep("yes", 6)))

我已经尝试过:

subset1 <- 
 file %>% 
 filter(NeedsMorpho == "yes") %>% 
 group_by(lepsp) %>%  
 mutate(lepsp = 
 paste0(lepsp,"_morphosp",match(plantfam,unique(plantfam))))

subset2 <- 
file %>% 
filter(NeedsMorpho == "yes") %>% 
setdiff(file, .)

file<-union(subset1, subset2) %>% arrange(lepsp)

最佳答案

这能达到您想要的效果吗?

library( data.table )
setDT(data)
data[ needsmorpho == "yes", lepsp := paste0(lepsp,"_morphosp",plantfam) ]

关于通过过滤、分组然后根据语句条件重命名因子级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47445842/

相关文章:

r - 在 `df1` 中创建一个变量,具体取决于 `df1` (`df1$var1` 的一个变量,以及 `df2` 的一个可根据 `df1$var1` 更改的变量

r - 使用标称变量删除 r 中的异常值

r - 类排列之间唯一

r - 为什么 reshape2 为我融化返回值 = NA?

r - 携带/使用上一组的值(value)

r - magrittr 三通管 %T>% 等效

R Shinydashboard 动态菜单项

r - 基于第一次出现状态标志的子集数据

r - 如何整理标准水文交换格式 (SHEF) 数据

r - 在 purrr 中迭代略有不同的模型