如何用dplyr为不存在元素的空DataFrame填充默认值?
简洁的dplyr实现方案
可以通过构造目标元素的临时数据框 + 左连接的方式实现,既不会修改原数据的列类型(不添加因子水平),也能对不存在的元素返回计数0。
示例代码
library(dplyr) # 原数据 myData = data.frame(Element = c("A","A","C","A","B","B","A"), Class = c(0,0,0,0,1,1,2)) # 定义要查询的目标元素,比如这里的"D" target_element <- "D" # 核心实现 tibble(Element = target_element) %>% left_join(myData %>% count(Element, name = "counted"), by = "Element") %>% mutate(counted = replace_na(counted, 0))
输出结果
Element counted 1 D 0
原理说明
- 先通过
tibble(Element = target_element)创建只包含目标元素的临时表,保证不管元素是否存在,都会保留这一行 - 用
left_join关联原数据的统计结果:原数据中存在的元素会匹配到计数,不存在的则counted列会是NA - 最后用
replace_na把NA替换为0,得到想要的结果
这种方法完全不需要修改原数据的Element列类型(保持字符型,不会添加额外因子水平),而且逻辑简洁通用,适用于任意目标元素的查询。
内容的提问来源于stack exchange,提问作者Curious Jorge - user9788072
相关产品推荐
相关产品推荐

