我试图找出论据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)
我对最后一行感到好奇:
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
软件包的原理和用法的信息的人,当然都应该读懂本文,尽管该插图并未解释语法。
在“ tidyr”中,gather
在自变量中指定度量变量...
。这在概念上与稍有不同melt
,在该示例中,许多示例(SO上甚至有很多答案)都显示了id.vars
参数的使用(假设未指定为ID的任何内容都是度量)。
如您所显示的示例,该...
参数还可以采用-
列名。这基本上是说“收集除此列以外的所有列”。的另一种速记方法gather
包括使用冒号指定列的范围,例如gather(stocks, stock, price, X:Z)
。
你可以比较gather
有melt
通过查看该函数的代码。以下是前几行:
> 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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句