创建增量列以绘制R中的时间序列差异
我有一套赛车圈时数据(mld),格式如下:创建增量列以绘制R中的时间序列差异,r,R,我有一套赛车圈时数据(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 我想制作这样的东西: car lap lapt
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
我想制作这样的东西:
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中优雅地创建填充差异列呢?我认为这就足够了:
mld$car.1.delta = c(NA, diff(mld$laptime, lag = 1))
在您的示例中,您截断了圈数,但将车.1.delta四舍五入,因此,如果您真的想让它工作,那么下面的代码给出了您发布的内容
使用将所有内容包装在中以简化,并基于对现有列的修改创建新的data.frame。在diff
前加一个NA
,将其填充出来
with(mld,
data.frame(
lap = lap,
car.1 = trunc(laptime),
car.1.delta = c(NA, round(diff(laptime)))
)
)
lap car.1 car.1.delta
1 1 138 NA
2 2 122 -16
3 3 121 -1
4 4 137 16
我想知道你是否想用车来做这个,如果是这样的话,它将需要更多的处理,但因为你确实要求了车。1
栏,我认为这就可以了 以下是几种方法:
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
,每个面板一列,请尝试以下操作:
plot(zz, type = "o")
library(lattice)
xyplot(diff ~ lap | car, DF, type = "o")
要仅绘制差异,我们首先不需要zz
,因为这样做:
plot(diff(z), type = "o")
(将screen=1
参数添加到plot
命令以在同一面板上绘制所有内容。)
2) ave。这里是第二个解决方案,它只使用普通的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)))
要仅绘制差异(每个面板一个),请尝试以下操作:
plot(zz, type = "o")
library(lattice)
xyplot(diff ~ lap | car, DF, type = "o")
更新
由于问题的标题提到了这一点,因此在上面添加了有关绘图的信息。谢谢-是的,最初的计划是能够处理第1栏中确定的不同车辆,但我还想确保明确回答简单案例的问题(部分是希望我能自己解决下一步!)