【发布时间】:2012-05-22 05:07:29
【问题描述】:
编辑:感谢迄今为止做出回应的人;我是 R 的初学者,刚刚为我的理学硕士论文承担了一个大型项目,所以对初始处理有点不知所措。我使用的数据如下(来自 WMO 公开的降雨数据):
120 6272100 KHARTOUM 15.60 32.55 382 1899 1989 0.0
1899 0.03 0.03 0.03 0.03 0.03 1.03 13.03 12.03 9999 6.03 0.03 0.03
1900 0.03 0.03 0.03 0.03 0.03 23.03 80.03 47.03 23.03 8.03 0.03 0.03
1901 0.03 0.03 0.03 0.03 0.03 17.03 23.03 17.03 0.03 8.03 0.03 0.03
(...)
120 6272101 JEBEL AULIA 15.20 32.50 380 1920 1988 0.0
1920 0.03 0.03 0.03 0.00 0.03 6.90 20.00 108.80 47.30 1.00 0.01 0.03
1921 0.03 0.03 0.03 0.00 0.03 0.00 88.00 57.00 35.00 18.50 0.01 0.03
1922 0.03 0.03 0.03 0.00 0.03 0.00 87.50 102.30 10.40 15.20 0.01 0.03
(...)
我对大约 100 个观测站感兴趣,每个观测站都有不同的降雨测量开始和结束日期。它们在单个数据文件中采用上述格式,各站之间用“120(站号)(站名)”分隔。
我需要先将这个文件按站分开,然后提取每年的三月、四月、五月和六月,然后将每年的这些月份合计起来。到目前为止,我一直在搞乱循环(如下所示),但我知道这不是正确的方法,我宁愿学习一些更好的技术。 再次感谢您的帮助!
(原问题:) 我有一个大型数据集,其中包含 100 多个地点的约 100 年按季节划分的降雨量。我正在尝试将这些数据分成更易于管理的数组,特别是我想检索每年每个站点的 3 月、4 月、5 月和 6 月的降雨量总和。 以下是到目前为止我的代码的简化版本:
a <- array(1,dim=c(10,12))
for (i in 1:5) {
all data:
assign(paste("station_",i,sep=""), a)
#march - june data:
assign(paste("station_",i,"_mamj",sep=""), a[,4:7])
}
所以这给了我station_(i)__mamj_,其中包含我对每个电台感兴趣的月份的数据。现在我想对这个数组的每一行求和,并将其输入一个名为station_(i)_mamj_tot 的新数组中。理论上很简单,但我不知道如何引用 station_(i)_mamj 以便它在每次迭代时改变 i 的值。非常感谢任何帮助!
【问题讨论】:
-
这不是一个可重复的示例,因为您没有提供任何数据。我建议您查看此LINK 以制作可重现的示例。
-
如前所述,您可能真的应该使用列表来解决这个问题。如果我们知道您的数据是什么样的,我们可能会为您提供更多帮助。例如,从我可以收集到的内容中,使用
split和lapply可能会更干净地完成您想要做的事情。 -
如果您可以以每列代表特定年份的一个月的方式制作数据框,那么您可以使用
summary(data.frame)得到总和 -
@Subs,他想按年份汇总,但只计算 mamj 总数。这是Split-Apply-Combine的工作!请参阅下面的 ddply 单线!
-
OP,只要你可以矢量化,就避免使用循环,这就是 R 的力量。在你的允许下,我想从 'variables','loops','concatenation'重新标记> 到 'vectorization','loops','plyr'?
标签: string r variables loops concatenation