我有以下形式的数据集:
object.type condition date replicate value
object1 condition1 17/2/2014 1 5000
object1 condition1 17/2/2014 2 6000
object1 condition1 18/2/2014 1 5500
object1 condition1 18/2/2014 2 6300
object1 condition2 17/2/2014 1 5000
object1 condition2 17/2/2014 2 6000
object1 condition2 18/2/2014 1 5500
object1 condition2 18/2/2014 2 6300
object2 condition1 17/2/2014 1 5000
object2 condition1 17/2/2014 2 6000
object2 condition1 18/2/2014 1 5500
object2 condition1 18/2/2014 2 6300
etc.
我想要做的是计算特定条件下某个对象的子集的平均值。因此,例如,对于object1,在条件1中,在17日,该值将为mean(c(5000, 5500))
。所以,最后我得到了一个像这样的data.frame:
object.type condition date value
object1 condition1 17/2/2014 5250
object1 condition1 18/2/2014 6150
object1 condition2 17/2/2014 5250
object1 condition2 18/2/2014 6150
object2 condition1 17/2/2014 5250
etc.
我可以使用嵌套循环(循环遍历所有级别的对象类型,循环遍历所有级别的条件,循环遍历所有级别的日期),但我是R的新手,我学到的是矢量化是解决这些问题的最佳方法。我似乎无法弄清楚我会怎么做。有什么功能在这里有用吗?或者除了使用三个嵌套的for循环之外,还需要一个更简洁的方法来迭代(并且效率低下)扩展数据框?
答案 0 :(得分:1)
使用aggregate(...)
,并假设您的数据位于df
:
result <- aggregate(value ~ object.type + condition + date, df, mean)
result
# object.type condition date value
# 1 object1 condition1 17/2/2014 5500
# 2 object2 condition1 17/2/2014 5500
# 3 object1 condition2 17/2/2014 5500
# 4 object1 condition1 18/2/2014 5900
# 5 object2 condition1 18/2/2014 5900
# 6 object1 condition2 18/2/2014 5900
如果您需要原始订单中的result
,
result <- with(result,result[order(object.type, condition, date),])
result
# object.type condition date value
# 1 object1 condition1 17/2/2014 5500
# 4 object1 condition1 18/2/2014 5900
# 3 object1 condition2 17/2/2014 5500
# 6 object1 condition2 18/2/2014 5900
# 2 object2 condition1 17/2/2014 5500
# 5 object2 condition1 18/2/2014 5900
答案 1 :(得分:0)
library(plyr)
ddply(data,~ object.type + condition ,summarise,average=mean(value))
从plyr包中试试上述内容