在区域级别使用doBy包汇总数据

时间:2015-02-24 14:04:59

标签: r

我有一个数据集数据如下,

Region  Country Market  Price     
EUROPE  France  France  30.4502    
EUROPE  Israel  Israel  5.14110965    
EUROPE  France  France  8.99665    
APAC    CHINA   CHINA   2.6877232    
APAC    INDIA   INDIA   60.9004    
AFME    SL      SL      54.1729685    
LA      BRAZIL  BRAZIL  56.8606917    
EUROPE  RUSSIA  RUSSIA  11.6843732    
APAC    BURMA   BURMA   63.5881232    
AFME    SA      SA      115.0733685

我想在地区层面总结数据,并在每个地区级别获得价格的和。

我希望输出如下所示。

Data Output


Region  Country Price     
EUROPE  France  30.4502    
EUROPE  Israel  5.14110965    
EUROPE  France  8.99665    
EUROPE  RUSSIA  11.6843732          
Europe          56.27233285         
APAC    BURMA   63.5881232    
APAC    CHINA   2.6877232    
APAC    INDIA   60.9004         
Apac            127.1762464         
AFME    BAHARAIN 54.1729685    
AFME    SA       115.0733685    
AFME             169.246337         
LA     BRAZIL    56.8606917         
LA               56.8606917

我使用了doBy包的summaryBy函数,我已经尝试过以下代码。

summaryBy

myfun1 <- function(x){c(s=Sum(x)}
DB= summaryBy(Data$Price ~Region + Country , data=Data, FUN=myfun1)

非常感谢Anyhelp。

2 个答案:

答案 0 :(得分:1)

您可以使用dplyr生成摘要表来执行此操作:

library(dplyr)
totals <- data %>% group_by(Region) %>% summarise(Country="",Price=sum(Price))

然后将摘要与其他数据合并:

summary <- rbind(data[-3], totals)

然后您可以按地区排序以将摘要与区域放在一起:

summary <- summary %>% arrange(Region)

输出:

   Region Country    Price
1    AFME      SL  54.1730
2    AFME      SA 115.0734
3    AFME         169.2463
4    APAC   CHINA   2.6877
5    APAC   INDIA  60.9004
6    APAC   BURMA  63.5881
7    APAC         127.1762
8  EUROPE  France  30.4502
9  EUROPE  Israel   5.1411
10 EUROPE  France   8.9967
11 EUROPE  RUSSIA  11.6844
12 EUROPE          56.2723
13     LA  BRAZIL  56.8607
14     LA          56.8607

答案 1 :(得分:0)

您必须按区域因素和每个因子的总和价格分割数据

lapply(split(data, data$Region), function(x) sum(x$Price))

或者,如果您需要显示结果:

totals = lapply(split(data, data$Region), function(x) rbind(x,data.frame(Region=unique(x$Region), Country="", Market="", Price=sum(x$Price))))
do.call(rbind, totals)