【发布时间】:2015-12-22 13:08:40
【问题描述】:
我有一个数据框,其中包含我从国家排放清单网站获得的 6 个变量的 6,497,651 个观察值,它具有以下变量:
fips SCC Pollutant Emissions type year
09001 10100401 PM25 15.14 POINT 1999
09001 10100402 PM25 234.75 POINT 1999
其中fips是县代码,SCC是源字符串名称,Pollutant是污染物类型(本例中为PM2.5排放),Emissions表示污染物排放量以吨为单位,type 是排放污染物的来源类型(道路、非道路、点等),year 记录了从 1999 年到 2008 年的年份。
基本上,我必须绘制一个简单的线图来展示每年排放水平的变化。现在,仅 1999 年就有上千个观测值;直到 2008 年的其他年份也是如此。这个问题一点也不难,因为我可以很容易地为每一年形成一个新的数据框,其中记录了所有排放量的总和,然后行绑定所有这些子集数据框。但是实现这一点的更有效和更整洁的方法可能是使用 FOR 循环,我可以根据每年计算“排放”下所有值的总和,并将所有这些信息存储到一个新的数据框中,但我被卡住了从哪里开始。如何输入将根据每年计算值总和的确切语法?我应该有一个看起来像这样的数据框:
Year Emissions
Emissions 记录了该特定年份所有排放值的总和。
【问题讨论】:
-
不要循环,ddply。见ddply。例如:
ddply(data, .(Year), function(x){em_sum <- sum(x$Emissions) data.frame(Emissions = em_sum)})类似的东西。如果您必须循环,需要注意的是,超过 1000 次迭代(可以说更少)通常有更有效的方法来获得所需的结果。 -
也许是
with(mydata, tapply(Emissions, year, sum))。最好添加一些带有您预期结果的实际样本数据。 -
根据@Pierre 的要求添加了详细信息