使用complete()函数补全缺失Month时报错‘Entity未找到’求助
我有一个包含Entity、Customer Class(列名CClass)、Month及其他列的数据框,数据样例如下:
| 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()函数为每个Customer Class补全缺失的Month,执行代码:
DF <- complete(DF, nesting(Entity, CClass), Month)
收到错误提示:! object 'Entity' not found,详细错误信息如下:
st <- complete(ST, nesting(Entity, CClass), SBMONTH)
Error indplyr::summarise():
! Problem while computing..1 = complete(data = dplyr::cur_data(), ..., fill = fill, explicit = explicit).
i The error occurred in group 1: CClass = "Bagel Shop", End Market = "Food Service", Entity = 1.
Caused by error:
! object 'Entity' not found
Runrlang::last_error()to see where the error occurred.
该函数在测试样本中可正常运行,求解决建议。
检查并取消数据框分组状态:从错误信息里的
dplyr::summarise()和分组提示可以看出,当前数据框处于分组状态。如果分组未包含Entity列,cur_data()里就不会有该列,导致报错。先执行取消分组:DF <- dplyr::ungroup(DF)再重新运行
complete()代码。确认列名拼写完全一致:错误信息里的代码用了
SBMONTH,但数据样例里列名是Month,要确保代码里的列名和数据框实际列名完全匹配,没有拼写错误。明确指定函数所属包:避免和其他包的同名函数冲突,直接用完整包名调用函数:
DF <- tidyr::complete(DF, tidyr::nesting(Entity, CClass), Month)若需分组补全,确保分组包含所有嵌套列:如果确实需要按特定分组补全月份,要保证分组变量包含
nesting()里的所有列(比如Entity和CClass),再执行complete()。
内容的提问来源于stack exchange,提问作者grislepak

