R对于具有某些条件的循环

时间:2015-09-11 15:45:50

标签: r if-statement for-loop

我有一个包含许多变量(村庄,房屋,周)的数据框(监视)。我想最终做一个时间序列分析。

目前,每个村庄有1-183周,每个村庄都有几个相关的房屋。我需要以下内容:每个村庄每周都有一个数据点。因此,我需要总结第三个变量。

实施例: 乡村周家屋影响
 A 3 7 12
 B 6 3 0
 C 6 2 2
 A 3 9 1
 A 5 8 0
 A 5 2 8
 C 7 19 0
 C 7 2 1
我试过这个并且失败了。我如何要求R仅对具有相同村庄和周值的观测值进行求和?

for (i in seq(along=surveillance)) {
    if (surveillance$village== surveillance$village& surveillance$week== surveillance$week)
    {surveillance$sumaffect <- sum(surveillance$affected)}
}

谢谢

2 个答案:

答案 0 :(得分:0)

无需循环。使用ddply或类似的

library(plyr)
Village = c("A","B","C","A","A","A","C","C")
Week = c(3,6,6,3,5,5,7,7)
Affect = c(12,0,2,1,0,8,0,1)

df = data.frame(Village,Week,Affect)
View(df)

result = ddply(df,.(Village,Week),summarise, val = sum(Affect))
View(result)

DF:

    Village Week    Affect
1   A   3   12
2   B   6   0
3   C   6   2
4   A   3   1
5   A   5   0
6   A   5   8
7   C   7   0
8   C   7   1

结果:

    Village Week    val
1   A   3   13
2   A   5   8
3   B   6   0
4   C   6   2
5   C   7   1

答案 1 :(得分:0)

函数aggregate将满足您的需求。

dfs <- '  Village Week House Affect
1       A    3     7     12
2       B    6     3      0
3       C    6     2      2
4       A    3     9      1
5       A    5     8      0
6       A    5     2      8
7       C    7    19      0
8       C    7     2      1
'
df <- read.table(text=dfs)

然后聚合

> aggregate(Affect ~ Village + Week , data=df, sum)
  Village Week Affect
1       A    3     13
2       A    5      8
3       B    6      0
4       C    6      2
5       C    7      1

这是拆分 - 应用 - 合并策略的一个例子;如果您经常这样做,您应该调查dplyr(或plyr,其祖先)或data.table作为快速进行此类分析的替代方案。

编辑:已更新为使用sum而不是mean