数据转换,几乎就像你使用cast和melt一样

时间:2016-01-27 02:35:33

标签: r transformation reshape2

我不知道如何命名这个数据转换,也不知道是否存在某种使用的函数

我的数据有这样的形状:

    rank  abbrv     country  eci_value delta  year
   (int) (fctr)      (fctr)      (dbl) (int) (int)
1     30    BRA      Brazil  0.5588656     2  1995
2     47    URY     Uruguay  0.2098838   -14  1995
3     52    PAN      Panama  0.1164776     2  1995
4     56    ARG   Argentina  0.0013733     7  1995
5     58    VEN   Venezuela -0.0329851    11  1995
6     64    COL    Colombia -0.2216275    -2  1995

我想要一个数据框,其中只包含“年”,“等级”所提供的信息以及以这种方式呈现的国家:

country     1995      1996      1997      1998      ...
Peru      rank1995  rank1996  rank1997  rank1998    ...
Brazil    rank1995  rank1996  rank1997  rank1998    ...
Chile     rank1995  rank1996  rank1997  rank1998    ...
...         ...       ...        ...      ...

变量“年”的范围从1995年到2014年,每年的排名不同

我曾想过使用reshape2包中的融合和dcast函数......但没有什么用处。

由于

1 个答案:

答案 0 :(得分:0)

这可能适合你。以下是使用dplyrtidyr的示例,使用上面的小样本(您必须在更大的数据集上进行测试或提供一个)。

library(dplyr)
library(tidyr)

df
#  rank abbrv   country  eci_value delta year
#1   30   BRA    Brazil  0.5588656     2 1995
#2   47   URY   Uruguay  0.2098838   -14 1995
#3   52   PAN    Panama  0.1164776     2 1995
#4   56   ARG Argentina  0.0013733     7 1995
#5   58   VEN Venezuela -0.0329851    11 1995
#6   64   COL  Colombia -0.2216275    -2 1995

df %>% select(country, year, rank) %>% spread(year, rank)
#    country 1995
#1 Argentina   56
#2    Brazil   30
#3  Colombia   64
#4    Panama   52
#5   Uruguay   47
#6 Venezuela   58