使用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))
但显然这是行不通的。那么,有没有人有更好的方法来首先索引数据集中的唯一组,并将方程应用于该组?
答
假设你总是有一个X,一个Y和一个Z为(TS,BIN)的每一种组合,我会试试这个:
aggregate(value ~ TS + Bin, data = V, FUN = function(x)sqrt(sum(x^2)))
答
使用plyr
和reshape
(或reshape2
)包。 (真的,如果你没有使用这些软件包,你会惊讶地发现有多好的东西。)简而言之,你首先需要将你的数据变成一个广泛的格式,这样,而不是列名为D
和value
的列,您有列名为X
,Y
和Z
。从那里,你可以使用任何数量的技术。 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。
在你的数字例子中,你需要围绕负数加括号:'-0.320^2'是负数。 – 2012-02-25 00:22:11