因此,我正在努力将数据转换为面板数据形式,以便我可以开始分析它。到目前为止,我已经导入并合并了我的excel文件,所以我的数据看起来像这样(请记住,实际数据有更多的行和更多的变量)
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”。
实际上,我希望将我的数据转换为如下所示:
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中做这件事相当棘手!
发布于 2021-02-05 05:18:11
一种解决方案如下
Data
> example <- data.frame(Company = "Kimball", date = "2020", FY0 = 4200, FY1 = 4210)
> example
Company date FY0 FY1
1 Kimball 2020 4200 4210代码
example %>%
tidyr::pivot_longer(., c("FY0", "FY1")) %>%
dplyr::group_by(Company) %>%
dplyr::mutate(Years = as.numeric(date) - (row_number() - 1)) %>%
dplyr::select(-date, -name)输出
# 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开始!这一点不用担心。
https://stackoverflow.com/questions/66053646
复制相似问题