2014-03-24 56 views
1

標準化的時間點我有一個大的數據集dat這樣的:每一個人

SUB TIME 
1 0.16 
1 0.76 
1 1.15 
1 1.48 
1 2 
1 2.98 
1 3.98 
1 4.96 
1 8.98 
1 12.13 
1 12.73 
2 0.18 
2 0.75 
2 1.16 
2 1.5 
2 2 
2 3.05 
2 3.98 
2 5.01 
2 8.96 
2 12.1 
2 12.7 
2 13.1 
... 

我想每一個人規範的時間點,讓大家從0開始預期的輸出應該是這樣的:

SUB TIME 
1 0 
1 0.6 
1 0.99 
1 1.32 
1 1.84 
1 2.82 
1 3.82 
1 4.8 
1 8.82 
1 11.97 
1 12.57 
2 0 
2 0.57 
2 0.98 
2 1.32 
2 1.82 
2 2.87 
2 3.8 
2 4.83 
2 8.78 
2 11.92 
2 12.52 
2 12.92 
... 

任何人都可以提供一些關於如何實現這一點的想法?非常感謝!

+0

你看谷歌的 「R值正常化」/文件? –

回答

1

它看起來像你想減去組的第一個值(如果排序,最小值o/w)。我會用ave這個,它允許你按組應用一個函數並返回一個相同長度的向量。

tmp <- textConnection("SUB TIME 
1 0.16 
1 0.76 
1 1.15 
1 1.48 
1 2 
1 2.98 
1 3.98 
1 4.96 
1 8.98 
1 12.13 
1 12.73 
2 0.18 
2 0.75 
2 1.16 
2 1.5 
2 2 
2 3.05 
2 3.98 
2 5.01 
2 8.96 
2 12.1 
2 12.7 
2 13.1") 
dat <- read.table(tmp, header=TRUE) 
dat$norm1 <- ave(dat$TIME, dat$SUB, FUN=function(x) x - x[1]) 
dat$norm2 <- ave(dat$TIME, dat$SUB, FUN=function(x) x - min(x)) 

這產生了:

> head(dat) 
    SUB TIME norm1 norm2 
1 1 0.16 0.00 0.00 
2 1 0.76 0.60 0.60 
3 1 1.15 0.99 0.99 
4 1 1.48 1.32 1.32 
5 1 2.00 1.84 1.84 
6 1 2.98 2.82 2.82 
+0

謝謝理查德! – dzadi