2012-02-24 14 views
2

を設定します。具体的に私は、ユニークな時間(TS)とビン(ビン)でグループ私の値をしたいI以下のデータを見ると、特定の時間や変数は、私は、データセットを持っている、と私は私の値のグループに式を適用したい

内のすべての値に

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

を適用したいと思い、 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       

だからアップ最初の夜1時59分50秒

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

でV1こととなり、その後t13においてV2のための:59:50

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

など

私はこの数式を使用しようとした

(データは「V」と呼ばれています)

しかし、明らかにそれは動作しません。だから誰もデータセット内の一意のグループを最初に索引付けし、そのグループに式を適用するより良い方法はありますか?

+1

は、あなたの負の数値を括弧で囲む必要があります: '-0.320^2'は負です。 –

答えて

2

をこの方法を試してください。

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

plyrreshape(またはreshape2)パッケージを使用してください。 (あなたがそれらのパッケージを使用していない場合は本当に、あなたがより良いものが行くどのくらい驚いなります。)簡単に言えば、あなたは広いフォームにcast()最初にあなたのデータにしたいでしょう、代わりにDvalueという名前の列のように、 X,YおよびZという列があります。そこから、任意の数のテクニックを使用できます。私は少し良くplyrパッケージにmutateが好きなもののベースでtransformは、動作します:

私は、あなたが常に(TS、ビン)の組み合わせごとに1 X、1 Y、および1つのZを持っているでしょうと仮定
V <- mutate(V, norm=sqrt(X^2+Y^2+Z^2)) 
+0

'cast'ステートメントが' TS'と 'Bin'の値に注意して、それらの行が正しくレイアウトされるようにしてください:-)。 –

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

をTS /ビンの組み合わせごとに1つのX、Y、およびZがある場合。あなたの数値例では

関連する問題