我有一个像这样的数据框:
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
分组。对于每个唯一的 lepsp
和 plantfam
匹配,lepsp
将被赋予一个唯一的形态物种名称。为了创建 morphosp 名称,我想粘贴 morphosp
和基于唯一 lepsp
和 plantfam
匹配的唯一编号。输出将是:
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/