从宽到长的数据转换多列

线

我有数据框df_wide,用于以宽格式显示公司数据

    df_wide <- data.frame(Company=c('CompanyA','CompanyB', 'CompanyC'),
             Industry=c('Manufacturing', 'Telecom', 'Services'),
             Sales.2015=c('100', '500', '1000'), 
             Sales.2016=c('110', '550', '1100'), 
             Sales.2017=c('120', '600', '1200'),
             EBITDA.2015=c('10', '50', '100'), 
             EBITDA.2016=c('11', '55', '110'),
             EBITDA.2017=c('12', '60', '120'))

        Company      Industry Sales.2015 Sales.2016 Sales.2017 EBITDA.2015 EBITDA.2016 EBITDA.2017
    1 CompanyA Manufacturing        100        110        120          10          11          12
    2 CompanyB       Telecom        500        550        600          50          55          60
    3 CompanyC      Services       1000       1100       1200         100         110         120

我希望将数据转换为df_long之类的长格式

    df_long <- data.frame(Company=c('CompanyA', 'CompanyA', 'CompanyA', 'CompanyB', 'CompanyB','CompanyB','CompanyC','CompanyC', 'CompanyC'),
              Industry=c('Manufacturing','Manufacturing','Manufacturing','Telecom','Telecom','Telecom','Services','Services','Services'),
              Year=c('2015','2016','2017','2015','2016','2017','2015','2016','2017'),
              Sales=c('100','110','120','500', '550','600','1000','1100','1200'),
              EBITDA=c('10','11','12','50','55','60','100','110','120'))

       Company      Industry Year Sales EBITDA
    1 CompanyA Manufacturing 2015   100     10
    2 CompanyA Manufacturing 2016   110     11
    3 CompanyA Manufacturing 2017   120     12
    4 CompanyB       Telecom 2015   500     50
    5 CompanyB       Telecom 2016   550     55
    6 CompanyB       Telecom 2017   600     60
    7 CompanyC      Services 2015  1000    100
    8 CompanyC      Services 2016  1100    110
    9 CompanyC      Services 2017  1200    120

我已经尝试过使用pivot_longer,并且仅使用一个变量就可以正常工作,但是在尝试同时调整Sales和EBITDA时却遇到了困难。

    df_long2 <- df_wide %>% pivot_longer(cols = starts_with("Sales"),
                                 names_to = "Year",
                                 values_to = "Sales")
罗纳克·沙

使用 pivot_longer

tidyr::pivot_longer(df_wide, 
                   cols = -c(Company, Industry), 
                   names_to = c(".value", "Year"),
                   names_sep = "\\.") %>% type.convert()

#  Company  Industry       Year Sales EBITDA
#  <fct>    <fct>         <int> <int>  <int>
#1 CompanyA Manufacturing  2015   100     10
#2 CompanyA Manufacturing  2016   110     11
#3 CompanyA Manufacturing  2017   120     12
#4 CompanyB Telecom        2015   500     50
#5 CompanyB Telecom        2016   550     55
#6 CompanyB Telecom        2017   600     60
#7 CompanyC Services       2015  1000    100
#8 CompanyC Services       2016  1100    110
#9 CompanyC Services       2017  1200    120

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将数据从宽转换为长(使用多列)

来自分类Dev

R从宽到长旋转多列

来自分类Dev

熊猫从宽到长的数据转换

来自分类Dev

熊猫从宽到长的数据转换

来自分类Dev

使用多索引列在Pandas中进行棘手的从宽到长的转换

来自分类Dev

使用多索引列在Pandas中进行棘手的从宽到长的转换

来自分类Dev

从宽到长重塑调查数据集

来自分类Dev

重塑数据帧(从宽到长)

来自分类Dev

多列从长数据到宽数据

来自分类Dev

r将具有模式的列名的数据集从宽到长转换

来自分类Dev

进行以下从宽到长格式的数据帧转换的好方法?

来自分类Dev

从宽到长

来自分类Dev

当ID变量在列标题中编码时,将数据从宽格式转换为长格式

来自分类Dev

将数据帧从宽转换为长,但将堆叠的行作为列

来自分类Dev

从宽到长收集数据帧,并使用R中的tidyverse生成新列

来自分类Dev

重塑R中的数据帧:从宽到长,但“可变”列的长度不相等

来自分类Dev

熊猫从宽到长,但列值作为新列

来自分类Dev

在SQL中将数据从宽格式转换为长格式

来自分类Dev

使用 dplyr 将数据帧从宽转换为长

来自分类Dev

从宽到长转置熊猫数据帧

来自分类Dev

如何重塑联合数据从宽到长?

来自分类Dev

R:覆盖从宽格式到长格式的数据帧

来自分类Dev

如何将具有不同列名的具有不同列名的数据帧从宽到长转换

来自分类Dev

从宽到长格式旋转,然后嵌套列

来自分类Dev

从宽到长有许多不同的列

来自分类Dev

麻烦的df从宽到长

来自分类Dev

复杂的重塑从宽到长

来自分类Dev

在R中从宽到长

来自分类Dev

tidyr:从宽到长的列名