【发布时间】:2014-06-12 19:57:18
【问题描述】:
我有一个看起来像这样的数据框
a b c d
1 1 1 0
1 1 1 200
1 1 1 300
1 1 2 0
1 1 2 600
1 2 3 0
1 2 3 100
1 2 3 200
1 3 1 0
我有一个看起来像这样的数据框
a b c d
1 1 1 250
1 1 2 600
1 2 3 150
1 3 1 0
我现在正在做 {
n=nrow(subset(Wallmart, a==i & b==j & c==k ))
sum=subset(Wallmart, a==i & b==j & c==k )
#sum
sum1=append(sum1,sum(sum$d)/(n-1))
}
我想添加“d”列并通过计算行数而不计算 0 来取平均值。例如第一行是 (200+300)/2 = 250。 目前我正在构建一个存储“d”列的列表,但理想情况下我希望它采用上述格式。例如第一行看起来像
a b c d
1 1 1 250
这是一种非常低效的方式来完成这项工作。代码需要很长时间才能循环运行。 因此,感谢任何帮助,使其运行得更快。原始数据框有大约一百万行。
【问题讨论】:
-
...你到底想达到什么目的?
-
我没有看到循环。您的问题似乎缺少一些东西。无论如何,永远不要在循环中使用
append。 -
对不起,我编辑了这个问题,现在应该很容易理解了。谢谢。
-
@user2575429,我在您的编辑后更新了我的答案。
标签: r data.table plyr dplyr subset-sum