【问题标题】:R studio - How to group data in a panel by year and sum themR studio - 如何按年份对面板中的数据进行分组并求和
【发布时间】:2019-04-09 03:36:45
【问题描述】:

我有一个 20 年和 10 家公司的面板数据集。

我有每家公司在欧洲和美国的销售数据。

我想绘制欧洲和美国每年的总体销售额。

基本上,我需要将每家公司每年针对各个变量的数字相加。

我该怎么做?

谢谢大家!我通过使用 group_by 解决了问题。

USsales <- data %>% group_by(Year) %>% summarize(tot_USsales = sum(USsales, na.rm = TRUE))

Europesales <- data %>% group_by(Year) %>% summarize(tot_Eursales = sum(Eursales, na.rm = TRUE))

netsales <- merge(Europesales, USsales, by="Year")

然后我就用 ggplot 来绘制它。

谢谢大家

【问题讨论】:

  • 请包含一些数据(样本或一些具有相同结构的模拟数据),以便我们制作可重现的示例。

标签: r data-visualization panel-data


【解决方案1】:

如果你使用 R,你可以这样做:

require(dplyr)
require(magrittr)

OverallSalesEurope <- Dataset %>% 
                       filter(Region == "Europe") %>% 
                        group_by(Company, Year) %>% 
                         summarize(OverallSales = 
                                   sum(Sales, na.rm=TRUE)) 

OverallSalesUS <- Dataset %>% 
                       filter(Region == "US") %>% 
                        group_by(Company, Year) %>% 
                         summarize(OverallSales = 
                                   sum(Sales, na.rm=TRUE)) 

当然,我们不知道你的变量在你的数据集中的名称是什么,但所涉及的原则在上面的代码中有所说明。

【讨论】:

    【解决方案2】:

    有一个数据样本会有所帮助。无论如何,这似乎是来自dplyr 库的group_by 的简单用例。

    基本上按companyyearcountry 分组,然后是sum

    这里是一个例子:

    library(dyplr)
    my_data %>% 
      group_by(company, year, country) %>% 
      summarise(mean_rev = mean(revenue))
    # # A tibble: 8 x 4
    # # Groups:   company, year [?]
    # company year  country mean_rev
    # <fct>   <fct> <fct>      <dbl>
    # 1 A       2017  EU          74.1
    # 2 A       2017  USA         59.6
    # 3 A       2018  EU          64.7
    # 4 A       2018  USA         79.8
    # 5 B       2017  EU          79.8
    # 6 B       2017  USA         79.1
    # 7 B       2018  EU          81.0
    # 8 B       2018  USA         74.7
    

    假数据:

    my_data <- data.frame(
      company = c(rep("A", 10), rep("B", 10)),
      year = rep(c("2017","2018"), 10),
      country = c(rep("EU", 20), rep("USA", 20)),
      revenue = runif(40,50,100)
    )
    head(my_data)
    #   company year country  revenue
    # 1       A 2017      EU 78.08958
    # 2       A 2018      EU 55.93207
    # 3       A 2017      EU 57.55178
    # 4       A 2018      EU 53.43027
    # 5       A 2017      EU 50.02976
    # 6       A 2018      EU 60.26888
    

    【讨论】:

    • 您似乎使用平均值进行平均,所以您实际上计算的是平均销售额而不是总体销售额?此外,欧洲不是一个国家,这就是为什么 Region 可能是 Country 变量的更好名称。除此之外,很好的答案!
    • 我的只是一个例子,唯一重要的部分是通过group_by分组。您可以轻松地将mean() 更改为sum()
    【解决方案3】:

    您似乎想绘制此图,而不仅仅是总结它。

    获取 RLave 数据集:

    my_data <- data.frame(
      company = c(rep("A", 10), rep("B", 10)),
      year = rep(c("2017","2018"), 10),
      country = c(rep("EU", 20), rep("USA", 20)),
      revenue = runif(40,50,100)
    )
    

    还有 ggplot2 包:

    library(ggplot2)
    
    ggplot(my_data,aes(x=country,y=revenue))+
      geom_boxplot()+
      theme_classic(base_size=12)+
      facet_wrap(~company+year)
    

    您可以为每个类别的公司、国家和年份构建构面。箱线图是这类数据常用的图形类型,第一个四分位数和第三个四分位数是盒子的两端,中位数用盒子内部的垂直线表示,最小值和最大值是盒子的两端胡须。

    【讨论】:

      猜你喜欢
      • 2020-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-17
      • 1970-01-01
      • 1970-01-01
      • 2022-07-07
      • 2014-05-06
      相关资源
      最近更新 更多