R中的dcast和recast有什么区别?

数据挖掘 r 数据清理
2022-01-28 16:43:39

我正在使用 R 中的数据框,其格式类似于此示例:

Countries <- c('USA','USA','Australia','Australia')
Type <- c('a','b','a','b')
X2014 <- c(10, -20, 30, -40)
X2015 <- c(20, -40, 50, -10)
X2016 <- c(15, -10, 10, -100)
X2017 <- c(5, -5, 5, -10)

df_sample <- data.frame(Countries, Type, X2014, X2015, X2016, X2017)

数据框如下所示:

  Countries Type X2014 X2015 X2016 X2017
1       USA    a    10    20    15     5
2       USA    b   -20   -40   -10    -5
3 Australia    a    30    50    10     5
4 Australia    b   -40   -10  -100   -10

我希望能够为每个国家/地区的每种类型创建年份值列,产生如下所示的内容:

        Countries   Year     a     b 
1       USA         X2014    10   -20   
2       USA         X2015    20   -40   
3       USA         X2016    15   -10  
4       USA         X2017     5    -5  
...

我得到recast了这个:

recast(df_sample, Countries ~ Type)

  Countries a b
1 Australia 4 4
2       USA 4 4

我得到dcast了这个:

dcast(df_sample, Countries ~ Type)

  Countries a   b
1 Australia 5 -10
2       USA 5  -5

我正在使用的数据集有 44 年的数据,所以我希望能够指示年度数据的所有列,而不必手动将每个列 id 输入到转换公式中。

dcast之间有什么区别recast(即它们最适合什么情况),是否可以用它们来塑造我的数据?

1个回答

请参阅?reshape2::recast:功能

方便地将熔化和(d)数据帧转换成一个步骤。

library(reshape2)
recast(df_sample, Countries+variable~Type, id.var=1:2)
#   Countries variable  a    b
# 1 Australia    X2014 30  -40
# 2 Australia    X2015 50  -10
# 3 Australia    X2016 10 -100
# 4 Australia    X2017  5  -10
# 5       USA    X2014 10  -20
# 6       USA    X2015 20  -40
# 7       USA    X2016 15  -10
# 8       USA    X2017  5   -5

所以,这只是这两个步骤的捷径:

(tmp <- melt(df_sample, id.vars=1:2))
#    Countries Type variable value
# 1        USA    a    X2014    10
# 2        USA    b    X2014   -20
# 3  Australia    a    X2014    30
# 4  Australia    b    X2014   -40
# 5        USA    a    X2015    20
# ...
dcast(tmp, Countries+variable~Type)
#   Countries variable  a    b
# 1 Australia    X2014 30  -40
# 2 Australia    X2015 50  -10
# 3 Australia    X2016 10 -100
# 4 Australia    X2017  5  -10
# 5       USA    X2014 10  -20
# 6       USA    X2015 20  -40
# 7       USA    X2016 15  -10
# 8       USA    X2017  5   -5