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

丹妮尔

我有一个这样的数据框:

 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)))

我需要先过滤所有needsmorpho这些yes然后,我需要将所有这些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) ]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章