我试图找出gather
包中tidyr
的参数。
我看了看文档,语法如下:gather(data, key, value, ..., na.rm = FALSE, convert = FALSE)
帮助文件中有一个example:
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)
我对最后一行感到好奇:
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 -4.2381224 0.7397038
2009-01-05 0.74139013 -2.5303960 -5.5197743
我没有看到任何迹象表明我们应该使用
X
,Y
或Z
的任何组合。当我使用此功能时,我觉得自己只是在为长格式的数据框中的列选择名称,然后祈祷gather
可以神奇地工作。想到这一点,当我使用melt
时,我有相同的感觉。gather
是否查看列的类型?它如何从宽到长映射?编辑
以下是一个很好的答案,下面是一个精彩的讨论,对于任何想了解更多有关
tidyr
软件包的原理和用法的信息的人,当然也应该读一下paper,尽管小插图没有解释语法。 最佳答案
在“tidyr”中,在gather
参数中指定...
的度量变量。这在概念上与melt
略有不同,在id.vars
上,许多示例(SO上甚至有很多答案)都显示了...
参数的使用(假设未指定为ID的任何内容都是度量)。
如所示示例,-
参数还可以采用gather
列名称。这基本上是说“收集除此列以外的所有列”。 gather(stocks, stock, price, X:Z)
中的另一种速记方法包括使用冒号指定列的范围,例如gather
。
您可以通过查看该函数的代码来比较melt
和ojit_code。以下是前几行:
> tidyr:::gather_.data.frame
function (data, key_col, value_col, gather_cols, na.rm = FALSE,
convert = FALSE)
{
data2 <- reshape2::melt(data, measure.vars = gather_cols,
variable.name = key_col, value.name = value_col, na.rm = na.rm)
关于r - 在tidyr中,函数 `gather`使用什么条件将数据帧从宽映射到长?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28133636/