【问题标题】:exclusions with '-' when using string versions (underscore suffix such as gather_()) of dplyr/tidyr functions使用 dplyr/tidyr 函数的字符串版本(下划线后缀,例如gather_())时带有“-”的排除项
【发布时间】:2015-05-08 19:23:57
【问题描述】:

通常使用 dplyr/tidyr,我可以通过否定实现排除

... %>% gather(x, -y)

但是,目前,我希望以编程方式指定一些变量并且作为排除项,所以理想情况下

... %>% gather_(xVar, -yVar)

其中 xVar 和 yVar 是字符变量(例如,具有值 'x' 和 'y')。

字符串版本的函数是不允许排除的,还是有办法做到这一点?

-yVarpaste0('-', yVar) 这两个明显的罪魁祸首似乎都会产生错误。

【问题讨论】:

  • 我觉得这个matches很好用,见?select底部的例子。我很惊讶你使用gather() 作为你的例子,它在tidyr,而不是dplyr
  • 修改为 tidyr/dplyr
  • 也许您也可以将其编辑为有效的gather 调用,并带有示例数据?在data 之后,接下来的两个gather 参数是keyvalue...我不认为“不是y 列”是value 的一个好参数。 (或者使用不同的函数,我在考虑gather() 中的负列的用例时遇到了麻烦......带有内置数据的示例会很清楚)。
  • 我不是 dplyr/tidyr 用户,但我要提醒您,数字否定运算符在与“[”的两个参数版本一起使用时对字符向量无效。您需要将逻辑否定运算符! 与该函数一起使用。你没有提供一个测试用例来解释迄今为止对这个问题缺乏关注。也许如果你编辑它以获得一个完整的例子,它可能会得到更多的关注。

标签: r dplyr tidyr


【解决方案1】:

我最近遇到了同样的问题。我使用了自己计算包含列的解决方法。这并不完全令人满意,但我认为gather_ 目前无法做到这一点。问题似乎出在select_vars_ 函数中。您可以使用select_vars_ 中的exclude 选项绕过它。

# creating sample data from example in gather
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)
)
# original call using gather
gather(stocks, stock, price, -time)
# calculating select_vars yourself
stocks %>% gather_("stock", 
                   "price", 
                   names(.)[!"time" == names(.)])
# using exclude in select_vars_
stocks %>% gather_("stock", 
                   "price", 
                   select_vars_(names(.), 
                                names(.), 
                                exclude = "time"))

【讨论】:

    猜你喜欢
    • 2019-05-07
    • 2014-11-02
    • 2014-12-13
    • 1970-01-01
    • 2015-10-05
    • 2019-12-22
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    相关资源
    最近更新 更多