R语言 在完整函数中找不到现有对象

fquxozlt  于 2023-06-19  发布在  其他
关注(0)|答案(2)|浏览(159)

我有一个数据框,其中包含以下列:EntityCustomer ClassMonth和其他

|CClass |Entity  |Month| Sales volume|
|-------|--------|-----|-------------|
|Bakery | 1      | 1   |100          |
|Bakery | 1      | 2   |106          |
|Bakery | 1      | 3   |103          |
|Bakery | 1      | 5   |135          |
|Bakery | 1      | 6   |121          |
|Bakery | 1      | 7   |176          |
|Bakery | 1      | 10  |133          |
|Bakery | 1      | 11  |100          |
|Bakery | 1      | 12  |112          |
|Bakery | 2      | 1   |136          |
|Bakery | 2      | 3   |123          |
|Bakery | 2      | 4   |108          |
|Bakery | 2      | 5   |101          |
|Bakery | 2      | 7   |105          |
|Bakery | 3      | 10  |103          |
|Bakery | 3      | 11  |106          |
|Bakery | 3      | 12  |110          |
|Grocery| 1      | 1   |120          |
|Grocery| 1      | 2   |150          |

当我尝试使用complete()函数将缺失的Month填充到每个Customer Class时:
DF <- complete(DF,nesting(EntityCClass),Month
我收到错误消息“!未找到对象“实体”
st <- complete(ST,nesting(Entity,CClass),SBMONTH)dplyr::summarise()中的错误:!计算..1 = complete(data = dplyr::cur_data(), ..., fill = fill, explicit = explicit)时出错。i组1中发生错误:CClass =“Bagel Shop”,End Market =“Food Service”,Entity = 1。由错误引起:!object 'Entity'找不到运行rlang::last_error()查看错误发生的位置。
但是对于测试样本,此功能有效。请指教

k5hmc34c

k5hmc34c1#

我无法重现错误。从一个新的R会话开始并使用以下数据:

DF = read.table(text = 'CClass Entity  Month Sales_volume
Bakery  1       1   100          
Bakery  1       2   106          
Bakery  1       3   103          
Bakery  1       5   135          
Bakery  1       6   121          
Bakery  1       7   176          
Bakery  1       10  133          
Bakery  1       11  100          
Bakery  1       12  112          
Bakery  2       1   136          
Bakery  2       3   123          
Bakery  2       4   108          
Bakery  2       5   101          
Bakery  2       7   105          
Bakery  3       10  103          
Bakery  3       11  106          
Bakery  3       12  110          
Grocery 1       1   120          
Grocery 1       2   150', header = T)

我加载tidyr并运行问题中的complete命令,得到了合理的输出:

library(tidyr)
complete(DF, nesting(Entity, CClass), Month)
# # A tibble: 40 × 4
#    Entity CClass Month Sales_volume
#     <int> <chr>  <int>        <int>
#  1      1 Bakery     1          100
#  2      1 Bakery     2          106
#  3      1 Bakery     3          103
#  4      1 Bakery     4           NA
#  5      1 Bakery     5          135
#  6      1 Bakery     6          121
#  7      1 Bakery     7          176
#  8      1 Bakery    10          133
#  9      1 Bakery    11          100
# 10      1 Bakery    12          112
# # … with 30 more rows
# # ℹ Use `print(n = ...)` to see more rows

一些建议:确保你使用的是tidyr::complete,如果你加载了另一个包,其中有一个complete函数可能会屏蔽正确的版本。您可以检查conflicts()并查看是否列出了complete,如果列出了,则指定tidyr::complete以获得正确的版本。还要检查names(DF),确保列名与您所认为的完全一致--没有多余的空格,大写正确,等等。还要检查class(DF)并确保它是data.frametbl_df,也许还可以查看str(DF)以确保列是适当的类。由于您没有使用dput()来共享数据,因此我们无法确定数据或列的类。
如果您仍然有问题,请尝试找到重现问题的数据样本,并请使用dput共享

zu0ti5jz

zu0ti5jz2#

你确信你的DF对象类是data.framedata.table吗?因为我在一个tbl对象上得到了同样的错误,它返回了同样的错误(虽然我使用了expand函数,但我认为这是同一个问题)。此外,我尝试使用您的代码复制您的错误,首先创建一个data.frame
DF <-数据。框架(CClass=c(rep(“Bakery”,17),rep(“杂货店”,2)),实体=c(1,1,1,1,1,1,1,1,2,2,2,3,3,1,1),月=c(1,2,3,5,6,7,10,11,12,1,3,4,5,7,10,11,12,1,2),Sales volume =c(100,106,103,135,121,176,133,100,112,136,123,108,101,105,103,106,110,120,150))
然后运行命令(DF <- complete(DF, nesting(Entity, CClass), Month))。这是输出
DF
A tibble:40 × 4实体CClass Month Sales.volume 1 1面包店1 100 2 1面包店2 106 3 1面包店3
103 4 1面包店4 NA 5 1面包店5
135 6 1面包店6 121 7 1面包店7
176 8 1面包店10 133 9 1面包店11
100 10 1 Bakery 12 112...使用print(n = ...)查看更多行
希望这是有用的。朱塞佩

相关问题