我试图找出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显然是我们想要修改的数据,这很好。

因此,我可以读到stockprice是键值对的参数-但是此函数如何决定如何选择列来创建此键值对?原始数据框如下所示:
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

我没有看到任何迹象表明我们应该使用XYZ的任何组合。当我使用此功能时,我觉得自己只是在为长格式的数据框中的列选择名称,然后祈祷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/

10-12 13:58