使用set_names函数时如何确认数据集的实际正确排序
问题根因
你遇到的排序异常不是数据集合并错误,是ggplot2对字符型分面变量的默认排序规则导致的:字符型变量默认按字母字典序排序,E、M、S的字母顺序刚好和你设置的顺序相反,所以分面展示倒置。
不查看全量数据校验数据集顺序的方法
执行以下两个简单命令即可完成校验,无需逐行核对海量数据:
- 校验原始列表命名与数据集的对应关系
运行命令map(list(df_1v, df_2v, df_3v) %>% set_names(c("S","M","E")), ~summary(.x)),输出会返回三个命名对应的数据集的统计摘要,你只需要核对每个命名下的数值范围、均值等特征和你预期的三个数据集特征匹配,就能确认命名对应关系正确。 - 校验合并后的数据分组顺序
运行命令unique(df$df),该函数返回的是字段值在数据集中首次出现的顺序:你调用map_dfr时会按输入列表的顺序依次拼接三个数据集,所以只要返回结果为"S" "M" "E",就可以完全确认合并逻辑正确,三个数据集的归属没有错乱。
修正分面展示顺序的方法
只需要将分面字段df转为指定排序规则的因子即可,有两种实现方式:
- 提前修改原数据的字段类型
# 在数据处理代码后、绘图代码前添加这一行 df$df <- factor(df$df, levels = c("S", "M", "E"))
- 不修改原数据,直接在绘图时指定排序
ggplot(df)+ geom_boxplot(aes(x = name, y = value), fill = "blue", color = "blue", alpha = 0.2, notch = T, notchwidth = 0.8)+ # 直接在facet_wrap内转因子指定顺序 facet_wrap(~factor(df, levels = c("S", "M", "E")), nrow = 1)
内容的提问来源于stack exchange,提问作者Someone_1313
相关产品推荐
相关产品推荐

