合并不匹配DataFrame并使用ggplot绘制叠加散点图
解决思路与代码实现
要合并这两个Var1范围不匹配的频数数据集,核心是保留所有可能的Var1值,同时区分每个频数属于pre还是post组,这样才能用ggplot画出叠加散点图。下面是具体步骤:
1. 给数据集添加分组标识
首先给postScore和preScore分别加上一个分组列,用来标记数据来源,避免合并后混淆:
library(dplyr) # 给postScore加分组标签 postScore <- postScore %>% mutate(group = "Post Score") # 给preScore加分组标签 preScore <- preScore %>% mutate(group = "Pre Score")
2. 全量合并两个数据集
因为两个数据集的Var1范围不同,我们需要用full_join()来保留所有Var1值,不管它在哪个数据集中出现过:
merged_data <- full_join(postScore, preScore, by = "Var1")
这一步之后,某个Var1值如果只在其中一个数据集里存在,另一个数据集的Freq和group会是NA,接下来我们要整理这些缺失值。
3. 整理缺失值与统一列结构
把缺失的频数替换为0(因为没出现的数值频数就是0),同时把分组列和频数列整理成统一的格式:
merged_data <- merged_data %>% # 合并两个group列,保留非NA值 mutate(group = coalesce(group.x, group.y)) %>% # 合并两个Freq列,缺失的补0 mutate(Freq = coalesce(Freq.x, Freq.y, 0)) %>% # 移除多余的临时列 select(Var1, Freq, group)
4. 用ggplot绘制叠加散点图
现在有了统一结构的数据集,就可以轻松画出叠加散点图了:
library(ggplot2) ggplot(merged_data, aes(x = Var1, y = Freq, color = group)) + geom_point(size = 3) + # 设置点的大小 labs(title = "Pre vs Post Score Frequency", x = "Score Value", y = "Frequency", color = "Score Type") + theme_minimal()
这样你就能得到一张清晰的叠加散点图,对比pre和post分数的分布啦!
内容的提问来源于stack exchange,提问作者Denisse Kowaleski
相关产品推荐
相关产品推荐

