将我data.frame从宽表转换为长表时遇到一些麻烦.目前它看起来像这样:
Code Country 1950 1951 1952 1953 1954
AFG Afghanistan 20,249 21,352 22,532 23,557 24,555
ALB Albania 8,097 8,986 10,058 11,123 12,246
Run Code Online (Sandbox Code Playgroud)
现在我想把它data.frame变成一个长期的data.frame.像这样的东西:
Code Country Year Value
AFG Afghanistan 1950 20,249
AFG Afghanistan 1951 21,352
AFG Afghanistan 1952 22,532
AFG Afghanistan 1953 23,557
AFG Afghanistan 1954 24,555
ALB Albania 1950 8,097
ALB Albania 1951 8,986
ALB Albania 1952 10,058
ALB Albania 1953 11,123
ALB Albania 1954 12,246
Run Code Online (Sandbox Code Playgroud)
我已经看过并尝试了它melt()的reshape()功能,因为有些人提出了类似的问题.但是,到目前为止我只得到凌乱的结果.
如果有可能我想用这个reshape() …
我试图找出论据gather的tidyr包.
我查看了文档,语法如下:
gather(data, key, value, ..., na.rm = FALSE, convert = FALSE)
帮助文件中有一个示例:
stocks <- data.frame(
time = as.Date('2009-01-01') + 0:9,
X = rnorm(10, 0, 1),
Y = rnorm(10, 0, 2),
Z = rnorm(10, 0, 4)
)
gather(stocks, stock, price, -time)
Run Code Online (Sandbox Code Playgroud)
我对最后一行感到好奇:
gather(stocks, stock, price, -time)
在这里,stocks显然是我们想要修改的数据,这很好.
所以我可以读取它stock并且price是键值对的参数 - 但是这个函数如何决定如何选择列来创建这个键值对?原始数据框如下所示:
time X Y Z
2009-01-01 1.10177950 -1.1926213 -7.4149618
2009-01-02 0.75578151 -4.3705737 -0.3117843
2009-01-03 -0.23823356 -1.3497319 3.8742654
2009-01-04 0.98744470 …Run Code Online (Sandbox Code Playgroud)