You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ggplot绘图中K=10数据缺失问题排查求助

K=10数据未显示的原因分析与解决

核心原因

问题出在lag()的计算逻辑上:

  • 你要计算K值间的相邻变化率,而lag()的作用是取当前行的前一行数据。假设你的数据按Run分组、K_value从小到大排序,那么每个Run里的K=10是最后一个值,没有对应的前序K值用来生成有效变化率,因此rate列会是NA。
  • 当按K_value分组求meanrate时,K=10对应的所有rate都是NA,最终meanrate也会是NA。而ggplot绘图时会自动过滤含NA的行,所以K=10的点和线不会显示。
  • 而CV_error的均值能正常显示,是因为每个K值都有原始的CV_error数据,不存在NA的情况。

验证方法

你可以先查看计算rate后的数据集,确认NA的分布:

# 计算rate并查看数据
df_with_rate <- df %>%
  arrange(Run, K_value) %>%
  group_by(Run) %>%
  mutate(rate = (CV_error - lag(CV_error))/lag(CV_error)) # 假设是相对变化率
print(df_with_rate)

# 查看分组汇总结果
summary_df <- df_with_rate %>%
  group_by(K_value) %>%
  summarise(meanrate = mean(rate), sd_rate = sd(rate))
print(summary_df)

你会看到K=10的meanrate为NA,这就是绘图不显示的直接原因。

解决思路

根据你的分析需求,有两种调整方向:

  1. 修正变化率计算逻辑
    • 若要展示当前K相对于前序K的变化率:先确保数据按Run和K_value正确排序,避免lag()取到其他Run的数值导致错误NA。此时K=1会是NA,K=10会有有效rate值。
    • 若要展示当前K到后序K的变化率:把lag()换成lead(),此时K=1到K=9会有有效rate,K=10仍为NA(无后续K值),属于正常逻辑,无需强行显示。
  2. 调整分析目标
    如果必须展示K=10的变化率,可改用与初始K(如K=1)的对比计算:
    df_with_rate <- df %>%
      group_by(Run) %>%
      mutate(rate = (CV_error - first(CV_error))/first(CV_error)) %>%
      ungroup()
    
    这样每个K(包括K=10)都会有有效rate值,分组汇总后就能正常绘图。

内容的提问来源于stack exchange,提问作者Katherine Drotos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 09:34:51