2012-02-24 30 views
2

我有一個數據集,我想將一個方程應用於我的數值組。具體來說,我想申請使用R將方程應用於數據集內的特定數據組

sqrt(X^2+Y^2+Z^2) 

所有值的具體時間和可變

望着數據中下面我想通過獨特的時間(TS)和分檔(賓)組我的價值觀,並抓住每個XY和Z分量的平方和的平方根。

id D  Bin value Month Day Year Hour Minute Second     TS 
    1 X  V1 -0.320  1 30 2012 13  59  50 2012-01-30 13:59:50 
    1 Y  V1 -0.088  1 30 2012 13  59  50 2012-01-30 13:59:50 
    1 Z  V1 0.171  1 30 2012 13  59  50 2012-01-30 13:59:50 
    1 X  V2 0.368  1 30 2012 13  59  50 2012-01-30 13:59:50 
    1 Y  V2 -0.104  1 30 2012 13  59  50 2012-01-30 13:59:50 
    1 Z  V2 0.008  1 30 2012 13  59  50 2012-01-30 13:59:50 
    2 X  V1 -0.052  1 30 2012 14  0  50 2012-01-30 14:00:50 
    2 Y  V1 0.278  1 30 2012 14  0  50 2012-01-30 14:00:50 
    2 Z  V1 -0.086  1 30 2012 14  0  50 2012-01-30 14:00:50 
    2 X  V2 -0.214  1 30 2012 14  0  50 2012-01-30 14:00:50 
    2 Y  V2 0.118  1 30 2012 14  0  50 2012-01-30 14:00:50 
    2 Z  V2 -0.030  1 30 2012 14  0       

所以最多第一是V1在十三時59分50秒

sqrt(-0.320^2 + -0.088^2 + 0.171^2) 

,然後在T13 V2:59:50

sqrt(0.368^2 +-0.104^2 + 0,008^2) 

我試圖用這個公式(數據被稱爲「V」)

V=aggregate(value~TS+variable,data=V,sqrt((if(V$D=="X")V$value^2)+(if(V$D=="Y")V$value^2))+(if(V$D=="Z")V$value^2)) 

但顯然這是行不通的。那麼,有沒有人有更好的方法來首先索引數據集中的唯一組,並將方程應用於該組?

+1

在你的數字例子中,你需要圍繞負數加括號:'-0.320^2'是負數。 – 2012-02-25 00:22:11

回答

2

假設你總是有一個X,一個Y和一個Z爲(TS,BIN)的每一種組合,我會試試這個:

aggregate(value ~ TS + Bin, data = V, FUN = function(x)sqrt(sum(x^2))) 
3

使用plyrreshape(或reshape2)包。 (真的,如果你沒有使用這些軟件包,你會驚訝地發現有多好的東西。)簡而言之,你首先需要將你的數據變成一個廣泛的格式,這樣,而不是列名爲Dvalue的列,您有列名爲X,YZ。從那裏,你可以使用任何數量的技術。 transform在基地會的工作,雖然我在plyr包好一點喜歡mutate

V <- mutate(V, norm=sqrt(X^2+Y^2+Z^2)) 
+0

只要確保'cast'語句記錄下'TS'和'Bin'的值,以便正確地排列這些行:-)。 – 2012-02-25 00:54:43

1
library("plyr") 
ddply(V, .(TS, Bin), summarise, norm=sqrt(sum(value*value))) 

如果每個TS /濱組合只有一個X,Y和Z。