我有一个.dbf,其中包含大约280万条记录,其中包含住宅包裹数据,其中包含年份类别字段,县代码字段和windzone字段(用于构建代码限制)。有3年建造的类别和5个风区。我需要为每个县的每个风区获得每年建造类别的包裹数量。基本上我有一个县(CNTY_ID = 11),有三年建造的类别(BUILT_CAT =“1”,“2”,“3”),每个类别也被分配到五个风速类别之一(WINDSPEED =“100”,“110” “,”120“等)。我想我需要使用aggregate()函数,但没有任何运气。最佳生成的表看起来像:
CNTY_ID = 11
BUILT_CAT
1 2 3
WINDSPEED
100 x x x
120 x x x
.
.
.
150 x x x
CNTY_ID = 12
BUILT_CAT
1 2 3
WINDSPEED
100 x x x
120 x x x
.
.
.
150 x x x
这种任务是否可以完成?
答案 0 :(得分:1)
实际上,您最好使用table
,这样可以减轻麻烦,提高性能。你得到一个数组,这个数组很容易转换为数据框。
一些测试数据:
n <- 10000
df <- data.frame(
windspeed = sample(c(110,120,130), n, TRUE),
built_cat = sample(c(1,2,3),n,TRUE),
cnty_id = sample(1:20,n,TRUE)
)
构建表并转换为数据框:
tbl <- with(df, table(windspeed, built_cat, cnty_id))
as.data.frame(tbl)
请注意,我在这里使用with
所以我自动将变量名称作为我的表的dimnames。这有助于转换。
答案 1 :(得分:0)
您实际需要的是一种分组数据的方法。
我认为dplyr
是要走的路。您也可以使用aggregate
。
使用dplyr
library(dplyr)
library(datasets)
temp <- airquality %>%
group_by(Month, Day) %>%
summarise(TOT = sum(Ozone))
View(temp)
这将以标准化格式提供数据,其中数据首先按Month
分组,然后按月Day
分组,然后对提供的变量求和。在这种情况下Ozone
。您也可以使用length
来计算值。
使用aggregate
temp2 <- aggregate(Ozone ~ Month + Day, data = airquality, sum)
View(temp2)
该方法的主要区别在于NA
的处理。
由于基本R函数没有对NAs
进行非常直观的处理,并且只要遇到它就会添加记录。因此,sum
组中的组对该分组实体失败,并从结果中删除。
以下是使用data.table
或ddply
进行治疗的其他组link。您也可以通过plyr
或tapply
来实现此目标。