2011-09-08 39 views
1

我有一組形式的賽車單圈數據:創建集團基於從一個兩列數據表以不同的羣大小列中的R

car lap laptime 
1 1 1 138.523 
2 1 2 122.373 
3 1 3 121.395 
4 2 1 137.871 
5 2 2 121.059 
6 2 3 125.720 
7 2 4 125.620 
8 3 1 140.764 
9 3 2 123.579 
10 3 3 124.799 
11 3 4 124.035 

,我想生產形式的東西:

lap car.1 car.2  car.3 
1 1 138.523 137.871 140.764 
2 2 122.373 121.059 123.579 
3 3 121.395 125.720 124.799 
4 4 NA  125.620 124.035 

我可以使用它作爲熱圖圖表的基礎。

我可以看到如何在Python中進行重塑,但是我正在努力尋找一種在R中做到這一點的優雅方式(並且我確信必須有幾種這樣的方法)?

作爲一個擴展,我將如何生成列car.1.diff,car2.diff等,以使car.1.diff中的值對應於car.1.laptime-min(car.1.laptimes ),car.2.diff對應於car.2.laptime-min(car.2.laptimes)等?

回答

2

下面是使用reshapeplyr包解決方案:

# read example data 
tmp1 <- read.table(textConnection(" car lap laptime 
1 1 1 138.523 
2 1 2 122.373 
3 1 3 121.395 
4 2 1 137.871 
5 2 2 121.059 
6 2 3 125.720 
7 2 4 125.620 
8 3 1 140.764 
9 3 2 123.579 
10 3 3 124.799 
11 3 4 124.035")) 

# calculate differences 
R> library("plyr") 
R> tmp2 <- ddply(tmp1, .(car), summarize, lap=lap, diff=laptime-min(laptime)) 
R> tmp2 
    car lap diff 
1 1 1 17.128 
2 1 2 0.978 
3 1 3 0.000 
4 2 1 16.812 
5 2 2 0.000 
6 2 3 4.661 
7 2 4 4.561 
8 3 1 17.185 
9 3 2 0.000 
10 3 3 1.220 
11 3 4 0.456 

# conversion to wide format 
R> library("reshape") 
R> cast(tmp1, lap ~ car, value=c("laptime")) 
    lap  1  2  3 
1 1 138.5 137.9 140.8 
2 2 122.4 121.1 123.6 
3 3 121.4 125.7 124.8 
4 4 NA 125.6 124.0 

R> cast(tmp2, lap ~ car, value=c("diff")) 
    lap  1  2  3 
1 1 17.128 16.812 17.185 
2 2 0.978 0.000 0.000 
3 3 0.000 4.661 1.220 
4 4  NA 4.561 0.456 
+0

精彩 - 感謝......我知道一定是這樣做的一個簡單的方法;轉換是我需要添加到我的基本工具箱中的另一個功能... – psychemedia

相關問題