【问题标题】:gather with tidyr: position must be between 0 and n error用 tidyr 收集:位置必须在 0 和 n 之间错误
【发布时间】:2015-12-07 08:49:23
【问题描述】:

我有一些数据如下:

x.row10 <- setNames(data.frame(letters[1:3],1:3,2:4,3:5,4:6,5:7,6:8,7:9),
                    c("names",2004:2009,2012))
#  names 2004 2005 2006 2007 2008 2009 2012
#1     a    1    2    3    4    5    6    7
#2     b    2    3    4    5    6    7    8
#3     c    3    4    5    6    7    8    9

现在我可以用 tidyr 包中的 gather() 让它们变长,方法是:

x.row10  %>% gather(Year, Val, -names)

但是当我使用

x.row10  %>% gather(Year, Val, c(2004:2009,2012))

这是我的直觉选择,我收到错误消息

错误:位置必须在 0 和 n 之间

这是怎么回事,如何解决?

【问题讨论】:

  • df %&gt;% gather(Year, Val, c(`2004`:`2009`,`2012`)) 一样添加反引号或使用有效的列名。 gather 认为您正在尝试选择超出范围的列索引。
  • 我收到一条错误消息:错误:所有 select() 输入必须解析为整数列位置。以下不适用:* c("2004":"2009", "2012") 使用反引号时
  • 它对我有用。 df 应该是 x.row10 当然
  • 这是一个很好的核心问题。我做了一些调整以使其最小化和可重复。这确实有助于将来快速获得答案。

标签: r tidyr


【解决方案1】:

该问题已标记为已解决,但我认为发布我的答案可能很有用。大卫阿伦伯格的做法是正确的。您需要准确的 反引号 才能正常工作。如果你像 cmets 中的 @uncool 那样使用 引号,你会得到和他一样的错误:

Error: All select() inputs must resolve to integer column positions.
The following do not:
*  c("2004":"2009", "2012")

对于德语键盘用户:如果您不知道如何输入反引号(就像几分钟前的我):

"Shift + the key on the right side of ß" and, after that, "spacebar".

【讨论】:

    【解决方案2】:
    x.row10  %>% gather(Year, Val, c(2:8))
    

    【讨论】:

    • x.row10df,不能同时使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多