【问题标题】:Calculate new values in R time series计算 R 时间序列中的新值
【发布时间】:2017-07-26 21:40:03
【问题描述】:

我有一个类型的数据集

ID      variable       value
200         B/L         81.3    
200         Wk2         6.1
200         Wk4         2.0
200         Wk8         2.2
201         B/L         123.3
201         Wk2         89.3
201         Wk4         72.4    
201         Wk8         55.8

我想在时间点之间添加变量变化的行,例如

ID      variable       value
200         B/L         81.3    
200         deltaB/L    NA
200         Wk2         6.1
200         deltaWk2    -75.2
200         Wk4         2.0
200         deltaWk4    -4.1
200         Wk8         2.2
200         deltaWk8    0.2
201         B/L         123.3
201         deltaB/L    NA
201         Wk2         89.3
201         deltaWk2    -34
201         Wk4         72.4    
201         deltaWk4    -16.9
201         Wk8         55.8
201         deltaWk8    -16.6

知道如何有效地做到这一点吗?

【问题讨论】:

  • 我建议添加新列data$delta <- c(NA, diff(data$value))

标签: r time-series


【解决方案1】:

variable 列似乎可能是一个有序因素,但幸运的是该顺序与字母顺序一致。为 delta 创建一个新列似乎是个好主意,但这不是您所要求的。下面的代码会产生您描述的输出。

library(tidyverse)
df <- data.frame(
  ID = c(200,200,200,200,201,201,201,201),
  variable = c('B/L', 'Wk2', 'Wk4', 'Wk8', 'B/L', 'Wk2', 'Wk4', 'Wk8'),
  value = c(81.3, 6.1, 2.0, 2.2, 123.3, 89.3, 72.4, 55.8))

group_by(df, ID) %>%
  do({mutate(., value = c(NA, diff(value)),
             variable = paste0(unique(variable), 'delta'))}) %>%
  bind_rows(df) %>%
  arrange(ID, variable)

【讨论】:

    猜你喜欢
    • 2022-06-15
    • 2011-02-06
    • 2019-07-31
    • 2014-09-29
    • 2019-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-19
    相关资源
    最近更新 更多