首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将面板数据转换为R中的正确格式

如何将面板数据转换为R中的正确格式
EN

Stack Overflow用户
提问于 2021-02-05 04:52:51
回答 1查看 103关注 0票数 0

因此,我正在努力将数据转换为面板数据形式,以便我可以开始分析它。到目前为止,我已经导入并合并了我的excel文件,所以我的数据看起来像这样(请记住,实际数据有更多的行和更多的变量)

代码语言:javascript
复制
   Company Name   Date                Market Share  ...5.x  ...6.x  ...7.x  ...8.x
   <chr>          <dttm>              <chr>         <chr>   <chr>   <chr>   <chr>
 1 NA             NA                  FY0           FY-1    FY-2    FY-3    FY-4  
 2 Kimball Elect  2020-06-29 23:00:00 4020          4422    4232    4111    4003
 3 Mercadolibre   2019-12-31 00:00:00 8357          2843    2653    2222    2134
 4 Lazard Ltd     2019-12-31 00:00:00 47700         45061   45050   43280   42281

如您所见,第1行用于指定市场份额变量的滞后时间,其中FY0等于日期列中的日期,然后FY-1是前一年,FY-2是前两年,依此类推。在原始excel文件中,市场份额列是多索引的,因此所有滞后都与市场份额列相关联,但是,当导入到R时,只有FY0与市场份额列相关联,所有其他列都自动填充为“...5.x ...6.x ...7.x ...8.x”。

实际上,我希望将我的数据转换为如下所示:

代码语言:javascript
复制
    Company Name   Date    Market Share 
 1  Kimball Elect  2020    4020          
 2  Kimball Elect  2019    4422
 3  Kimball Elect  2018    4232
 4  Kimball Elect  2017    4111 
 5  Kimball Elect  2016    4003
 6  Mercadolibre   2019    8357    
 7  Mercadolibre   2018    2843
 8  Mercadolibre   2017    2653
 9  Mercadolibre   2016    2222
 10 Mercadolibre   2015    2134
 11 Lazard Ltd     2019    47700
 12 Lazard Ltd     2018    45061
 13 Lazard Ltd     2017    45050
 14 Lazard Ltd     2016    43280
 15 Lazard Ltd     2015    42281

因此,基本上我希望以一种使时间延迟的方式将数据转置为行,然后将每个延迟(FY0、FY-1、FY-2……)关联起来。日期/年份由日期列减去滞后ie确定。FY0 = 2020-06-29所以FY-1 = 2019-06-29。

提前感谢任何能够提供帮助的人,因为我觉得在R中做这件事相当棘手!

EN

回答 1

Stack Overflow用户

发布于 2021-02-05 05:18:11

一种解决方案如下

Data

代码语言:javascript
复制
> example <- data.frame(Company = "Kimball", date = "2020", FY0 = 4200, FY1 = 4210)
> example
  Company date  FY0  FY1
1 Kimball 2020 4200 4210

代码

代码语言:javascript
复制
example %>% 
      tidyr::pivot_longer(., c("FY0", "FY1")) %>% 
               dplyr::group_by(Company) %>% 
                      dplyr::mutate(Years = as.numeric(date) - (row_number() - 1)) %>%    
                                   dplyr::select(-date, -name)

输出

代码语言:javascript
复制
# A tibble: 2 x 3
# Groups:   Company [1]
  Company value Years
  <chr>   <dbl> <dbl>
1 Kimball  4200  2020
2 Kimball  4210  2019

编辑

要解决您的问题:

(1)第一行包含变量FY0,...。因此,您只需将第三、第四、…、最后一列的列替换为第一行减去前两列的值,即colnames(df) <- df[1, 3:(ncols(df))]

(2) row_number()与分组有关!因此,对于每个组,即固定,编号将再次从1开始!这一点不用担心。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66053646

复制
相关文章

相似问题

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