假设我有一个像这样的数据框:
df<-
plantfam plantsp plantcn
Asteraceae fuzzy leaf
Asteraceae fuzzy leaf
Asteraceae Baccharis latifolia
Poaceae 3vien
Asteraceae non-fuzzy leaf
我想以一个因素为条件给植物种子名称空白植物:植物食物应该是菊科。从而在plantcn中给出描述符,指定唯一的morpho名称。输出应如下所示:
output<-
plantfam plantsp plantcn
Asteraceae Asteraceae_morphosp1 fuzzy leaf
Asteraceae Asteraceae_morphosp1 fuzzy leaf
Asteraceae Baccharis latifolia
Poaceae 3vien
Asteraceae Asteraceae_morphosp2 non-fuzzy leaf
我尝试调整以下代码:https://stackoverflow.com/a/44270608/8061255并尝试以下操作但没有成功:
file<-file %>%
mutate(plantsp=ifelse(plantsp!="" | plantfam=="Asteraceae", plantsp,
paste0(plantfam, "_morphosp", match(plantcn, unique
(plantcn)))))
答案 0 :(得分:0)
首先是代码块,然后我会解释我做了什么:
temp <- df %>%
filter(is.na(plantsp)) %>%
group_by(plantfam, plantcn) %>%
summarize(plantsp=NA) %>%
group_by(plantfam) %>%
mutate(dummy = cumsum(!is.na(plantcn))) %>%
mutate(plantsp = paste0(plantfam, " morpho", dummy)) %>%
select(-dummy)
我建议的第一件事是删除不需要变异filter(is.na(plantsp))
的条目。
然后使用group_by(plantfam, plantcn) %>% summarize(plantsp=NA)
汇总冗余条目。
我添加了一个dummy
变量,该变量在plantcn
的每个组中计算mutate(dummy = cumsum(!is.na(plantcn)))
。
我使用这个虚拟变量来创建你想要的字符串mutate(plantsp = paste0(plantfam, " morpho", dummy))
。
最后,使用dummy
删除select(-dummy)
列。
这是结果数据框:
temp
plantfam plantcn plantsp
<chr> <chr> <chr>
1 Asteraceae fuzzy leaf Asteraceae morpho1
2 Asteraceae non-fuzzy leaf Asteraceae morpho2
3 Poaceae 3vien Poaceae morpho1
您可以添加已包含plantsp
名称的条目:
new.df <- df %>%
filter(!is.na(plantsp)) %>%
full_join( ., temp, by = c("plantfam","plantsp","plantcn"))
new.df
注意:如果你想保留冗余条目,你需要做一些更复杂的事情