Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建增量列以绘制R中的时间序列差异_R - Fatal编程技术网

创建增量列以绘制R中的时间序列差异

创建增量列以绘制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

我有一套赛车圈时数据(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 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栏中确定的不同车辆,但我还想确保明确回答简单案例的问题(部分是希望我能自己解决下一步!)