【问题标题】:How to normalize data series to start value = 0?如何将数据系列标准化为起始值 = 0?
【发布时间】:2019-07-27 21:39:48
【问题描述】:

我有一个类似这样的数据集:

library(ggplot2)
data(economics_long)
economics_long$date2 <- as.numeric(economics_long$date) + 915
ggplot(economics_long, aes(date2, value01, colour = variable)) +
       geom_line()

这给出了以下情节:

现在我想将它归一化为绿线的起始值(或平均值),因此所有变量都从 Y 轴的同一点开始。类似这样:

感谢您的帮助。

【问题讨论】:

  • 也许在每个时间序列的开头添加一个值0

标签: r ggplot2 normalization series


【解决方案1】:

您可以使用by() 根据variable-value 减去每个向量的起始值。

library(ggplot2)
l <- by(economics_long, economics_long$variable, function(x) 
  within(x, varnorm <- value01 - value01[1]))
dat <- do.call(rbind, l)

ggplot(dat, aes(date2, value01.n, colour = variable)) +
  geom_line()

【讨论】:

  • 太好了,使用 by() 和 split() 生成列表对我来说是新的!谢谢!
【解决方案2】:

使用 group_by()mutate() 将每个变量移动其初始 y 值。

library(tidyverse)
data(economics_long)

economics_long %>% 
  group_by(variable) %>% 
  mutate(value_shifted = value01 - value01[1]) %>% 
  ungroup() %>% 
  ggplot(aes(date2, value_shifted, colour = variable)) +
  geom_line()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-25
    • 2019-01-07
    • 2019-08-07
    • 2018-07-25
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    相关资源
    最近更新 更多