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

Data transformation, almost like when you use cast and melt

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

我的数据是这样的:

    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

我想要一个数据框,其中仅包含 "year, "rank" 提供的信息和以这种方式呈现的国家/地区:

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

var "year" 范围从 1995 年到 2014 年,排名每年都不同

我想过使用 reshape2 包中的 melt 和 dcast 函数...但是没有任何用处。

谢谢

这对你有用。这是一个使用 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