【问题标题】:Error: Can't subset columns that don't exist - selecting from a fable in R错误:无法对不存在的列进行子集化 - 从 R 中的寓言中选择
【发布时间】:2021-08-11 19:12:30
【问题描述】:

我正在 R 中构建多个预测,并尝试从预测输出中选择某些列。下面是这个寓言的样子:

> head(forData)
# A fable: 6 x 8 [1M]
# Key:     .model [1]
  .model     Month             ABC .mean DateVar             PCT     Ind1    Ind2
  <chr>      <mth>          <dist> <dbl> <dttm>              <dbl>   <dbl>   <dbl>
1 average 2021 Jul N(0.31, 0.0017) 0.315 2021-07-01 00:00:00  3.25       0       0
2 average 2021 Aug N(0.33, 0.0024) 0.328 2021-08-01 00:00:00  3.25       0       0
3 average 2021 Sep N(0.33, 0.0029) 0.329 2021-09-01 00:00:00  3.25       0       0
4 average 2021 Oct N(0.32, 0.0038) 0.322 2021-10-01 00:00:00  3.25       0       0
5 average 2021 Nov N(0.33, 0.0044) 0.328 2021-11-01 00:00:00  3.25       0       0
6 average 2021 Dec N(0.33, 0.0051) 0.326 2021-12-01 00:00:00  3.25       0       0

当我尝试使用 dplyr 选择任何列时,我收到以下错误:

> forData %>% select(Month, .mean)
Error: Can't subset columns that don't exist.
x Column `ABC` doesn't exist.

下面的代码为我提供了 Month 和 .mean 的向量,因此我认为名称是正确的,但我无法理解它给出的错误。

forData$Month
forData$.mean

【问题讨论】:

    标签: r dplyr fable-r


    【解决方案1】:

    转换成tibble后我们可以使用反引号来选择

    forData %>% 
            as_tibble %>% 
             select(Month, `.mean`)
    

    【讨论】:

    • 我仍然遇到同样的错误。如果我只是尝试选择月份,我会收到错误消息。
    • 刚刚看到您的编辑,成功了,谢谢!
    【解决方案2】:

    这里的根本问题(从错误中不清楚,我会尝试改进)是&lt;fable&gt; 必须包含一个分布列。通过选择Month.mean,您将删除所需的ABC(分布)列。如果您不再需要该分布,则需要转换为不同的数据类,这里有两个主要选项:

    • &lt;tsibble&gt;as_tsibble()(需要您仍然拥有的时间列 Month
    • &lt;tibble&gt;as_tibble()(对其包含的列没有要求)

    【讨论】:

    • 谢谢,这很有帮助。这个错误确实让我感到困惑,但现在它是有道理的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-30
    相关资源
    最近更新 更多