【问题标题】:Summarize data using doBy package at region level在区域级别使用 doBy 包汇总数据
【发布时间】:2015-02-24 14:04:59
【问题描述】:

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

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

我想汇总 Region 级别的数据,得到每个 Region Level 的价格总和。

我希望输出如下所示。

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)

非常感谢您对这方面的任何帮助。

【问题讨论】:

    标签: r


    【解决方案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
    

    【讨论】:

    • 您可能可以像Data %&gt;% group_by(Region) %&gt;% summarise(Country="",Price=sum(Price)) %&gt;% rbind(Data[-3]) %&gt;% arrange(Region, desc(Country)) 中那样将整个事情集中在一起
    • 感谢大卫的建议。我尝试了这两种方法,但在区域层面的总总结我得到了 NA .. 例如。对于 AFME 而不是 169.246,但最终结果显示 AFME "NA"。
    • 代码似乎适用于您提供的数据(使用read.table)。您能否通过粘贴dput(yourdata) 的输出将数据结构添加到您的问题中?如果行数很多,您可以使用dput(head(data))
    【解决方案2】:

    您必须按区域因素拆分数据并为每个因素求和价格

    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)
    

    【讨论】:

      猜你喜欢
      • 2023-01-24
      • 1970-01-01
      • 2021-04-02
      • 2018-12-05
      • 2019-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多