使用R将方程应用于数据集内的特定数据组

使用R将方程应用于数据集内的特定数据组

问题描述:

我有一个数据集,我想将一个方程应用于我的数值组。具体来说,我想申请使用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

假设你总是有一个X,一个Y和一个Z为(TS,BIN)的每一种组合,我会试试这个:

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

使用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

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

如果每个TS /滨组合只有一个X,Y和Z。