r - 在数据框中输入附加行作为相邻现有行值之间的中点

标签 r dataframe time-series missing-data

假设您在 r 中有以下时间序列数据集:

n <- 3
set.seed(1)
df <- data.frame(Day = rep("Mon", n),
           Time = 1:n,
           Temper = round(rnorm(n, 4, 2), 0))
print(df)

  Day Time Temper
  Mon    1      3
  Mon    2      4
  Mon    3      2

现在假设您希望添加相邻现有值之间的中点作为数据框中的额外行。例如,假设您希望在每对相邻值之间添加精确的中点,以生成以下新数据帧:

  Day Time Temper
  Mon    1      3
  Mon  1.5    3.5
  Mon    2      4
  Mon  2.5      3
  Mon    3      2

什么是可以在更大的数据集上完成此任务的高效 R 代码?

如果这段代码还可以使用不仅仅是精确中点的值(例如“三分之一”数据点)填充数据框,那就太好了:

  Day Time Temper
  Mon    1      3
  Mon 1.33   3.33
  Mon    2      4
  Mon 2.33   3.33
  Mon    3      2

最佳答案

另一个解决方案:

library(tidyverse)

df %>%
  slice(rep(1:n(), each = 2)) %>%
  mutate_at(c("Time", "Temper"), function(x) {
    replace(x, seq(2, n(), 2),
            (x + (1 / 3) * (lead(x) - lag(x)))[seq(2, n(), 2)])
  }) %>%
  mutate_at(c("Time", "Temper"), round, 2) %>%
  slice(-n())
#>   Day Time Temper
#> 1 Mon 1.00   3.00
#> 2 Mon 1.33   3.33
#> 3 Mon 2.00   4.00
#> 4 Mon 2.33   3.33
#> 5 Mon 3.00   2.00

关于r - 在数据框中输入附加行作为相邻现有行值之间的中点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56391865/

相关文章:

r - R/shiny 中的 selectInput 框 - 多个值具有相同标签的选择列表

python - 这个 pandas dataframe.apply(lambda) 有什么问题?

Python Pandas 数据框操作以形成更大的数据框

python - Pandas 数据框在枢轴后 reshape

使用 rethinkdb 的时间序列数据库

r - 预测包中 auto.arima() 中的季节性

r - 去除 NA 的 max.col

html - DT & Shiny : make header borders more pronounced

r - 在 Linux 中创建临时文件夹

r - R中的时间序列