【问题标题】:Reshaping a dataset [duplicate]重塑数据集[重复]
【发布时间】:2020-10-03 08:32:55
【问题描述】:

我对 R 很陌生,但我仍然不太擅长它。 我正在使用如下所示的数据框:

 ID      ESG var         Y2009     Y2010     Y2011
 A      ESG score         5.1       3.5       4.8       
 A      Emissions         3.0       1.4       1.3 
 B      ESG score         6.5       4.6       2.1 
 B      Emissions         3.6       1.9       1.6 

但我想重塑它,让它看起来像:

ID   YEARS    ESG score      Emissions
 A    2009        5.1             3.0
 A    2010        3.5             1.4
 A    2011        4.8             1.3
 B    2009        6.5             3.6
 B    2010        4.6             1.9
 B    2011        2.1             1.6 

我需要一个取三个值(2009、2010、2011)的年份变量,然后转到取相应数值的两个 ESG 变量(ESG score 和 Emission)。

我尝试使用函数 reshape() 和 melt() 但我找不到任何好方法。 有人可以帮帮我吗?

【问题讨论】:

  • 你可以这样做tidyr::pivot_longer(d, -c(ID, ESG var)) %>% tidyr::pivot_wider(names_from = "ESG var", values_from = "value")

标签: r dataframe data-structures


【解决方案1】:
library(reshape)

out <- cast(melt(df, id=c("ID","ESG.var")),ID+variable~ESG.var,value="value")
out[,2] <- as.numeric(gsub("Y","",out[,2]))    
colnames(out)[2] <-"YEARS"
out

给予,

  ID YEARS Emissions ESG score
1  A  2009       3.0       5.1
2  A  2010       1.4       3.5
3  A  2011       1.3       4.8
4  B  2009       3.6       6.5
5  B  2010       1.9       4.6
6  B  2011       1.6       2.1

数据:

df <- read.table(text="ID      'ESG var'         Y2009     Y2010     Y2011
 A      'ESG score'         5.1       3.5       4.8       
 A      'Emissions'         3.0       1.4       1.3 
 B      'ESG score'         6.5       4.6       2.1 
 B      'Emissions'         3.6       1.9       1.6",header=T, stringsAsFactors=FALSE)

【讨论】:

    猜你喜欢
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    • 1970-01-01
    相关资源
    最近更新 更多