ITPub博客

首页 > > > R语言中财务数据整形:wide <--> long

R语言中财务数据整形:wide <--> long

作者:浪花小雨滴 时间:2020-06-16 15:28:06 0 删除 编辑

在R语言中,tidyr包和data.table分别提供了相应的长宽数据变换的函数。在做资本市场微观企业数据分析时,尤其财务数据指标(如Wind的数据格式是宽数据),这个两个包提供的函数友好程度还可以提升。

======================================================================


Stata中直接提供一个reshape就搞定了,并且可以自动分割和命名变量。这个太赞了。

具体的数据结构如下。

哈哈,恼火的是你这样要变换的变量命名需要有连贯性,不然Stata就识别不出来。(这个时候需要用renvars来批量转换变量名称)

======================================================================

下面分享data.table包提供的函数功能。

这里直接举例,不一一交代具体参数了。

1.生成模拟数据

library(data.table)
set.seed(123)

market <- data.table(
  stkcd=1:100,
  type =sample(c(0,1),100,replace = TRUE),
  industry=sample(letters,100,replace = TRUE),
  roa2013=runif(100, min = 0, max = 1),
  roa2014=runif(100, min = 0, max = 1),
  roa2015=runif(100, min = 0, max = 1),
  lev2013=runif(100, min = 0, max = 1),
  lev2014=runif(100, min = 0, max = 1),
  lev2015=runif(100, min = 0, max = 1)
)
head(market)

有些数据库提供的财务数据如上图一般,是宽数据。在具体分析时需要转换成长数据。

2.宽变长

上面的方法采用正则表达式来匹配变量。此外上述把变换后因子变量variable改成数值型变量year。这个才是我们想要的结果。否则转化的结果就是下面这样了。

除了上面的方法以外,还有一个稍微麻烦一点的方法。

paste("roa",2013:2015,sep="")的作用是生成连续的字符向量。这个代码块有时候还很有用处的。

3.长变宽

这个时候就好办了。

是不是一切又回到原点,那个最初的market数据集?

======================================================================


? ??上面的setorder(long , stkcd, year)只是虚晃一招,在此处分析中没什么作用。

如何有更便捷的变换方法,欢迎交流。

-------------------------------------------------

分享一个链接:RStudio发布的R语言与数据分析的系列视频。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3160945/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-05-16

  • 博文量
    4259
  • 访问量
    40008