gpt4 book ai didi

r - 创建一个增量列来绘制 R 中的时间序列差异

转载 作者:行者123 更新时间:2023-12-04 16:55:27 25 4
gpt4 key购买 nike

我有一组以下形式的赛车运动单圈数据(mld):

  car lap laptime
1 1 1 138.523
2 1 2 122.373
3 1 3 121.395
4 1 4 137.871

我想制作以下形式的东西:
  lap  car.1    car.1.delta   
1 1 138 NA
2 2 122 -16
3 3 121 -1
4 4 127 6

我可以使用 R 命令 diff(mld$laptime, lag=1) 来生成差异列,但是如何在 R 中优雅地创建填充差异列?

最佳答案

这里有几种方法:

1) 动物园

如果我们使用 zoo 将其表示为时间序列,那么计算将特别简单:

# test data with two cars

Lines <- "car lap laptime
1 1 138.523
1 2 122.373
1 3 121.395
1 4 137.871
2 1 138.523
2 2 122.373
2 3 121.395
2 4 137.871"
cat(Lines, "\n", file = "data.txt")

# read it into a zoo series, splitting it
# on car to give wide form (rather than long form)

library(zoo)
z <- read.zoo("data.txt", header = TRUE, split = 1, index = 2, FUN = as.numeric)

# now that its in the right form its simple

zz <- cbind(z, diff(z))

最后一条语句给出:
> zz
1.z 2.z 1.diff(z) 2.diff(z)
1 138.523 138.523 NA NA
2 122.373 122.373 -16.150 -16.150
3 121.395 121.395 -0.978 -0.978
4 137.871 137.871 16.476 16.476

绘制 zz ,每个面板一列,试试这个:
plot(zz, type = "o")

只绘制我们并不真正需要的差异 zz首先,这将执行以下操作:
plot(diff(z), type = "o")

(将 screen=1 参数添加到 plot 命令以在同一面板上绘制所有内容。)

2) 大街 .这是第二个解决方案,它只使用普通的 R(绘图除外)并保持长格式的输出;然而,它有点复杂:
# assume same input as above

DF <- read.table("data.txt", header = TRUE)
DF$diff <- ave(DF$laptime, DF$car, FUN = function(x) c(NA, diff(x)))

结果是:
> DF
car lap laptime diff
1 1 1 138.523 NA
2 1 2 122.373 -16.150
3 1 3 121.395 -0.978
4 1 4 137.871 16.476
5 2 1 138.523 NA
6 2 2 122.373 -16.150
7 2 3 121.395 -0.978
8 2 4 137.871 16.476

要仅绘制差异,每个面板一个,请尝试以下操作:
library(lattice)
xyplot(diff ~ lap | car, DF, type = "o")

更新

由于问题的标题提到了这一点,因此在上面添加了有关绘图的信息。

关于r - 创建一个增量列来绘制 R 中的时间序列差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7552334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com