2017-05-22 25 views
-1

我有困难重塑我的数据帧从宽到长格式。重塑数据帧从广泛到长

目前,我的数据帧,在wide格式,看起来是这样的:

  Scenario Quantile Income2014 Electricity2014 PopulationWeight ElasticityIncomeDemand Income2015 Income2016 
1 Scenario_base  1 4.561682  48.56899   39.7801    0.3816979 4.698532 4.839488 
991 Scenario_25  1 4.561682  48.56899   39.7801    0.3816979 11.607532 11.748488 
1981 Scenario_50  1 4.561682  48.56899   39.7801    0.3816979 11.607532 11.748488 
    Income2017 Income2018 Electricity2015 Electricity2016 Electricity2017 Electricity2018 
1  4.984673 5.134213  49.12516  49.68768  50.25666  50.83214 
991 11.893673 12.043213  52.34187  52.56053  52.78403  53.01246 
1981 11.893673 12.043213  82.37218  82.73368  83.10308  83.48050 

我将如何将其转换为long格式是这样的:

Variable  Scenario Country Year Quantile Value 
    Income Scenario_base U.S. 2014  1 4.561682 
    Income Scenario_base U.S. 2015  1 4.698532 
    Income Scenario_base U.S. 2016  1 4.839488 
    Income Scenario_base U.S. 2017  1 4.984673 
    Income Scenario_base U.S. 2018  1 5.134213 
    Income Scenario_25 U.S. 2014  1 4.561682 
    Income Scenario_25 U.S. 2015  1 11.607532 
    Income Scenario_25 U.S. 2016  1 11.748488 
    Income Scenario_25 U.S. 2017  1 11.893673 
    Income Scenario_25 U.S. 2018  1 12.043213 
    Income Scenario_50 U.S. 2014  1 4.561682 
    Income Scenario_50 U.S. 2015  1 11.607532 
    Income Scenario_50 U.S. 2016  1 11.748488 
    Income Scenario_50 U.S. 2017  1 11.893673 
    Income Scenario_50 U.S. 2018  1 12.043213 
Electricity Scenario_base U.S. 2014  1 48.56899 
Electricity Scenario_base U.S. 2015  1 49.12516   
Electricity Scenario_base U.S. 2016  1 49.68768 
Electricity Scenario_base U.S. 2017  1 50.25666 
Electricity Scenario_base U.S. 2018  1 50.83214 
Electricity Scenario_25 U.S. 2014  1 48.56899 
Electricity Scenario_25 U.S. 2015  1 52.34187   
Electricity Scenario_25 U.S. 2016  1 52.56053   
Electricity Scenario_25 U.S. 2017  1 52.78403    
Electricity Scenario_25 U.S. 2018  1 53.01246 
Electricity Scenario_50 U.S. 2014  1 48.56899 
Electricity Scenario_50 U.S. 2015  1 82.37218   
Electricity Scenario_50 U.S. 2016  1 82.73368   
Electricity Scenario_50 U.S. 2017  1 83.10308    
Electricity Scenario_50 U.S. 2018  1 83.48050 
+0

使用'melt'。这里是一个参考http://seananderson.ca/2013/10/19/reshape.html – akash87

+0

谢谢@ akash87的方向。 – ClarityParity

+0

感谢@Imo的发现! – ClarityParity

回答

0

使用tidyr,继任者的reshape2。 (和dplyr其助手功能starts_with()):在`data.table`或`reshape2`包

df1 <- read.table(header = TRUE, stringsAsFactors = FALSE, text = 
"Scenario Quantile Income2014 Electricity2014 PopulationWeight ElasticityIncomeDemand Income2015 Income2016 Income2017 Income2018 Electricity2015 Electricity2016 Electricity2017 Electricity2018 
Scenario_base  1 4.561682  48.56899   39.7801    0.3816979 4.698532 4.839488 4.984673 5.134213  49.12516  49.68768  50.25666  50.83214 
Scenario_25  1 4.561682  48.56899   39.7801    0.3816979 11.607532 11.748488 11.893673 12.043213  52.34187  52.56053  52.78403  53.01246 
Scenario_50  1 4.561682  48.56899   39.7801    0.3816979 11.607532 11.748488 11.893673 12.043213  82.37218  82.73368  83.10308  83.48050") 

library(tidyr) 
library(dplyr) 

df1 %>% 
    gather(var_year, Value, starts_with("Income"), starts_with("Electricity")) %>% 
    separate(var_year, c("Variable", "Year"), -5) 
#   Scenario Quantile PopulationWeight ElasticityIncomeDemand Variable Year  Value 
# 1 Scenario_base  1   39.7801    0.3816979  Income 2014 4.561682 
# 2 Scenario_25  1   39.7801    0.3816979  Income 2014 4.561682 
# 3 Scenario_50  1   39.7801    0.3816979  Income 2014 4.561682 
# 4 Scenario_base  1   39.7801    0.3816979  Income 2015 4.698532 
# 5 Scenario_25  1   39.7801    0.3816979  Income 2015 11.607532 
# 6 Scenario_50  1   39.7801    0.3816979  Income 2015 11.607532 
# 7 Scenario_base  1   39.7801    0.3816979  Income 2016 4.839488 
# 8 Scenario_25  1   39.7801    0.3816979  Income 2016 11.748488 
# 9 Scenario_50  1   39.7801    0.3816979  Income 2016 11.748488 
# 10 Scenario_base  1   39.7801    0.3816979  Income 2017 4.984673 
# 11 Scenario_25  1   39.7801    0.3816979  Income 2017 11.893673 
# 12 Scenario_50  1   39.7801    0.3816979  Income 2017 11.893673 
# 13 Scenario_base  1   39.7801    0.3816979  Income 2018 5.134213 
# 14 Scenario_25  1   39.7801    0.3816979  Income 2018 12.043213 
# 15 Scenario_50  1   39.7801    0.3816979  Income 2018 12.043213 
# 16 Scenario_base  1   39.7801    0.3816979 Electricity 2014 48.568990 
# 17 Scenario_25  1   39.7801    0.3816979 Electricity 2014 48.568990 
# 18 Scenario_50  1   39.7801    0.3816979 Electricity 2014 48.568990 
# 19 Scenario_base  1   39.7801    0.3816979 Electricity 2015 49.125160 
# 20 Scenario_25  1   39.7801    0.3816979 Electricity 2015 52.341870 
# 21 Scenario_50  1   39.7801    0.3816979 Electricity 2015 82.372180 
# 22 Scenario_base  1   39.7801    0.3816979 Electricity 2016 49.687680 
# 23 Scenario_25  1   39.7801    0.3816979 Electricity 2016 52.560530 
# 24 Scenario_50  1   39.7801    0.3816979 Electricity 2016 82.733680 
# 25 Scenario_base  1   39.7801    0.3816979 Electricity 2017 50.256660 
# 26 Scenario_25  1   39.7801    0.3816979 Electricity 2017 52.784030 
# 27 Scenario_50  1   39.7801    0.3816979 Electricity 2017 83.103080 
# 28 Scenario_base  1   39.7801    0.3816979 Electricity 2018 50.832140 
# 29 Scenario_25  1   39.7801    0.3816979 Electricity 2018 53.012460 
# 30 Scenario_50  1   39.7801    0.3816979 Electricity 2018 83.480500 
+0

谢谢你,@Aurèle! – ClarityParity