首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于SIC代码在行业级别上聚合公司特定数据

基于SIC代码在行业级别上聚合公司特定数据
EN

Stack Overflow用户
提问于 2020-09-14 17:37:44
回答 2查看 43关注 0票数 0

我有大约250,000行公司特定的年度数据(2000-2019年),以及每家公司的行业SIC代码。其目的是根据年份对每个SIC代码的每个变量列中的值进行求和。前几行的数据如下所示:

代码语言:javascript
运行
复制
>head(compustat)
  gvkey datadate fyear indfmt consol popsrc datafmt curcd      at   capx     ceq emp      ni     revt xrd costat  sic
1  1004 20000531  1999   INDL      C      D     STD   USD 740.998 22.344 339.515 2.9  35.163 1024.333  NA      A 5080
2  1004 20010531  2000   INDL      C      D     STD   USD 701.854 13.134 340.212 2.5  18.531  874.255  NA      A 5080
3  1004 20020531  2001   INDL      C      D     STD   USD 710.199 12.112 310.235 2.2 -58.939  638.721  NA      A 5080
4  1004 20030531  2002   INDL      C      D     STD   USD 686.621  9.930 294.988 2.1 -12.410  606.337  NA      A 5080

对于列"at“、"capx”、"ceq“、"emp”、"ni“、"revt”、"xrd“,我需要所有公司每年具有相同SIC代码的总金额。因此,我的输出将是2000年至2019年期间同一行业SIC内所有变量的总值。

有人能帮我做到这一点吗?

谢谢,

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-14 20:11:55

尝试此tidyverse解决方案。您可以按照策略选择所需的变量,设置一个group_by(),然后使用summarise_all()计算总和。您的共享数据很小,但它应该适用于较大的数据。代码如下:

代码语言:javascript
运行
复制
library(tidyverse)
#Code
df %>%
  #Filter years
  filter(fyear>=2000 & fyear<=2019) %>%
  #Select variables
  select(sic,fyear,at,capx,ceq,emp,ni,revt,xrd) %>%
  #Group by sic and year
  group_by(sic,fyear) %>%
  #Compute total
  summarise_all(sum,na.rm=T)

输出:

代码语言:javascript
运行
复制
# A tibble: 3 x 9
# Groups:   sic [1]
    sic fyear    at  capx   ceq   emp    ni  revt   xrd
  <int> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <int>
1  5080  2000  702. 13.1   340.   2.5  18.5  874.     0
2  5080  2001  710. 12.1   310.   2.2 -58.9  639.     0
3  5080  2002  687.  9.93  295.   2.1 -12.4  606.     0

使用的一些数据:

代码语言:javascript
运行
复制
#Data
df <- structure(list(gvkey = c(1004L, 1004L, 1004L, 1004L), datadate = c(20000531L, 
20010531L, 20020531L, 20030531L), fyear = 1999:2002, indfmt = c("INDL", 
"INDL", "INDL", "INDL"), consol = c("C", "C", "C", "C"), popsrc = c("D", 
"D", "D", "D"), datafmt = c("STD", "STD", "STD", "STD"), curcd = c("USD", 
"USD", "USD", "USD"), at = c(740.998, 701.854, 710.199, 686.621
), capx = c(22.344, 13.134, 12.112, 9.93), ceq = c(339.515, 340.212, 
310.235, 294.988), emp = c(2.9, 2.5, 2.2, 2.1), ni = c(35.163, 
18.531, -58.939, -12.41), revt = c(1024.333, 874.255, 638.721, 
606.337), xrd = c(NA, NA, NA, NA), costat = c("A", "A", "A", 
"A"), sic = c(5080L, 5080L, 5080L, 5080L)), class = "data.frame", row.names = c("1", 
"2", "3", "4"))
票数 0
EN

Stack Overflow用户

发布于 2020-09-14 20:17:07

你可以使用dplyr库来实现这一点:考虑到你有一个像这样的数据帧dw

代码语言:javascript
运行
复制
dw <- read.table(header=T, text='
gvkey datadate fyear indfmt consol popsrc datafmt curcd      at   capx     ceq emp      ni     revt xrd costat  sic
1004 20000531  1999   INDL      C      D     STD   USD 740.998 22.344 339.515 2.9  35.163 1024.333  NA      A 5080
1004 20010531  2000   INDL      C      D     STD   USD 701.854 13.134 340.212 2.5  18.531  874.255  NA      A 5080
1004 20020531  2001   INDL      C      D     STD   USD 710.199 12.112 310.235 2.2 -58.939  638.721  NA      A 5080
1004 20010531  2000   INDL      C      D     STD   USD 701.854 13.134 340.212 2.5  18.531  874.255  NA      A 5080
1004 20020531  2008   INDL      C      D     STD   USD 710.199 12.112 310.235 2.2 -58.939  638.721  NA      A 5080
1004 20030531  2002   INDL      C      D     STD   USD 686.621  9.930 294.988 2.1 -12.410  606.337  NA      A 5080
1004 20030531  2002   INDL      C      D     STD   USD 686.621  9.930 294.988 2.1 -12.410  606.337  NA      A 5080
')

下面的代码可以通过sic和fyear对其进行分组,然后选择fyear大于2000的行。

代码语言:javascript
运行
复制
library(dplyr)
df = as.data.frame(dw %>% group_by(sic, fyear) %>% summarise(capx=sum(capx), ceq=sum(ceq),emp=sum(emp), ni=sum(ni), revt=sum(revt), xrd=sum(xrd)))
df = df[df$fyear >=2000, ]
print(df)

最终输出如下所示:

代码语言:javascript
运行
复制
   sic fyear   capx     ceq emp      ni     revt xrd
  5080  2000 26.268 680.424 5.0  37.062 1748.510  NA
  5080  2001 12.112 310.235 2.2 -58.939  638.721  NA
  5080  2002 19.860 589.976 4.2 -24.820 1212.674  NA
  5080  2008 12.112 310.235 2.2 -58.939  638.721  NA
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63881786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档