2011-09-26 97 views
3

我有一組形式的賽車單圈數據(MLD)的:創建增量列繪製R中的時間序列差異

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中優雅地創建填充差異列?

回答

9

這裏有幾個的方法:

1)動物園

如果我們使用動物園則計算將是特別簡單表示這是一個時間系列:

# 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)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))) 

結果是:

> 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") 

更新

添加了以上關於繪圖的信息,因爲問題的標題ñ提到這一點。

3

我覺得這就夠了:

mld$car.1.delta = c(NA, diff(mld$laptime, lag = 1)) 

在你的榜樣,你已經被截斷賽況,但圓潤car.1.delta,所以如果你真的要看你怎麼想,要工作,但下面的代碼給你貼什麼。

將所有東西都包裹在with中以簡化並基於現有列的修改創建新的data.frame。預先將NA加到diff中將其填充。

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 

我不知道你想這樣做by車,如果是這樣就需要更多的處理,但是因爲你從字面上問car.1專欄中,我想這樣的作品,只要是去。

+0

謝謝 - 是的,最初的計劃是能夠應付第1欄中列出的不同車輛,但我也希望確保明確地提供簡單的案例問答(部分原因是我希望能夠制定出下一步我自己!) – psychemedia