我有一个有3个变量和1.425.558个观察值的data.frame。这是一个可再生能源工厂安装的电力登记。每一行代表一座已安装的发电厂。在一个邮政编码区域可以有多个相同类型的发电厂。
ID zipcode Type power
1 79280 solarpower 3
2 79280 solarpower 3
3 79283 hydroelectric 3
4 79280 biogas 55
5 79280 windpower 2
6 21459 windpower 4
7 21459 windpower 2
我想用邮政编码加多少太阳能/沼气/风电被安装。
zipcode Type power
21459 windpower 6
79280 solarpower 6
79280 windpower 2
...and so on.
我已经试过了
aggregate(myDat$power, by=list(myDat$zipcode,myDat$type), FUN=sum)
但我的内存不够。
我知道我的数据很大。我可以缩小范围,因为我只需要那些以"2“开头的邮政编码的数据。
你能告诉我一个解决办法吗?非常感谢你帮助一个初学者!
发布于 2014-02-10 12:30:21
如果我正确理解了您的需要,您可以使用dplyr来表示:
> data %.% group_by( zipcode, Type ) %.% summarise( power = sum(power) )
Source: local data frame [5 x 3]
Groups: zipcode
zipcode Type power
1 21459 windpower 6
2 79280 windpower 2
3 79280 biogas 55
4 79283 hydroelectric 3
5 79280 solarpower 6
如果你只想要那些从2
开始的邮政编码,你可以先filter
:
> data %.% filter( grepl( "^2", zipcode ) ) %.%
group_by( zipcode, Type ) %.% summarise( power = sum(power) )
Source: local data frame [1 x 3]
Groups: zipcode
zipcode Type power
1 21459 windpower 6
发布于 2014-02-10 16:27:11
data.table
版本:
library(data.table)
dt = data.table(your_df)
dt[, sum(power), by = list(zipcode, Type)]
首先缩小范围:
dt[grep("^2", zipcode), sum(power), by = list(zipcode, Type)]
因为grep
很昂贵,所以在dplyr
和data.table
中,您最好先总结一下(按速度计算),然后进行过滤,即:
dt[, sum(power), by = list(zipcode, Type)][grep("^2", zipcode)]
https://stackoverflow.com/questions/21674918
复制相似问题