使用 tapply 并根据两个条件显示结果
Use tapply and show results on two criteria
我想创建一个 table 计算每个城镇的居民按人口普查区收入组和城镇缴纳的州税总额。我用以下数据对此建模。
Town<-c("Andover","Andover","Burlington","Burlington","Burlington","Burlington","Cheshire")
Category<-c("Low","Middle","High","Low","Middle","Middle","Low")
Value<-c(100,350,230,450,100,200,50)
all<-data.frame(Town,Category,Value)
t1<-tapply(all$Value[all$Category=="Low"],all$Town[all$Category=="Low"],sum)
t2<-tapply(all$Value[all$Category=="Middle"],all$Town[all$Category=="Middle"],sum)
t3<-tapply(all$Value[all$Category=="High"],all$Town[all$Category=="High"],sum)
t4<-cbind(t1,t2,t3)
在我的实际数据集中,尽管各个 tapply 文件的长度并不相同。例如,t1 将有 19 个条目,而 t3 将有 55 个。因此我无法 cbind 结果。不幸的是,我无法用建模数据重现这个问题。
无论如何,我如何创建 t4 table 而不必使用 for 循环或多个 tapply 和合并函数?
基本上我想使用像 table
这样的函数
#i.e.
table(all$Town,all$AMIBand)
用第三列的总和替换出现次数,在本例中为
all$Value
如果我理解正确的话,你想要这样的东西:
dcast(all, Town ~ Category, value.var="Value", fun.aggregate=sum)
我想创建一个 table 计算每个城镇的居民按人口普查区收入组和城镇缴纳的州税总额。我用以下数据对此建模。
Town<-c("Andover","Andover","Burlington","Burlington","Burlington","Burlington","Cheshire")
Category<-c("Low","Middle","High","Low","Middle","Middle","Low")
Value<-c(100,350,230,450,100,200,50)
all<-data.frame(Town,Category,Value)
t1<-tapply(all$Value[all$Category=="Low"],all$Town[all$Category=="Low"],sum)
t2<-tapply(all$Value[all$Category=="Middle"],all$Town[all$Category=="Middle"],sum)
t3<-tapply(all$Value[all$Category=="High"],all$Town[all$Category=="High"],sum)
t4<-cbind(t1,t2,t3)
在我的实际数据集中,尽管各个 tapply 文件的长度并不相同。例如,t1 将有 19 个条目,而 t3 将有 55 个。因此我无法 cbind 结果。不幸的是,我无法用建模数据重现这个问题。
无论如何,我如何创建 t4 table 而不必使用 for 循环或多个 tapply 和合并函数?
基本上我想使用像 table
这样的函数#i.e.
table(all$Town,all$AMIBand)
用第三列的总和替换出现次数,在本例中为
all$Value
如果我理解正确的话,你想要这样的东西:
dcast(all, Town ~ Category, value.var="Value", fun.aggregate=sum)