假设您在 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/