将嵌套循环的结果写入R中的矢量对象

时间:2010-08-19 10:32:18

标签: r loops statistics nested

我将以下数据作为名为“data_old”的数据框读入R:

   yes year month
1  15 2004     5
2   9 2005     6
3  15 2006     3
4  12 2004     5
5  14 2005     1
6  15 2006     7
.   .  ...     .
.   .  ...     .

我写了一个循环数据的小循环,总结了每个月/年组合的yes变量:

year_f <- c(2004:2006)
month_f <- c(1:12)

for (i in year_f){
    for (j in month_f){
        x <- subset(data_old, month == j & year == i, select="yes")
        if (nrow(x) > 0){
            print(sum(x))
            }
        else{print("Nothing")}
        }
    }

我的问题是:我可以在终端中打印每个月/年组合的总和,但是如何将其存储在矢量中? (嵌套循环让我头疼,试图解决这个问题。)

托马斯

3 个答案:

答案 0 :(得分:7)

另一种方式,

library(plyr)
ddply(data_old,.(year,month),function(x) sum(x[1]))

  year month V1
1 2004     5 27
2 2005     1 14
3 2005     6  9
4 2006     3 15
5 2006     7 15

答案 1 :(得分:6)

忘记循环,你想使用聚合函数。最近在this SO question中对它们进行了讨论。

with(data_old, tapply(yes, list(year, month), sum))

是众多解决方案之一。

此外,当您没有连接任何内容时,您不需要使用c()。普通1:12没问题。

答案 2 :(得分:3)

只需添加第三个选项:

aggregate(yes ~ year + month, FUN=sum, data=data_old)