使用dtplyr处理含空格列名时报错:Object '`aa aa`' not found
解决dtplyr处理带空格列名时的分组错误
你遇到的错误是因为dtplyr对反引号包裹列名的解析逻辑和预期不同,导致它把包含反引号的字符串当作列名去查找,而实际列名并不包含反引号。
解决方案
以下几种方式都能正确识别带空格的列名:
- 用双引号包裹列名
df_dt %>% group_by("aa aa") %>% slice(n())
- 使用
all_of()函数(推荐,符合tidyverse规范)
df_dt %>% group_by(all_of("aa aa")) %>% slice(n())
- 结合
rlang::sym()进行符号转换
library(rlang) df_dt %>% group_by(!!sym("aa aa")) %>% slice(n())
原因说明
当你写group_by(aa aa)时,dtplyr错误地将`aa aa`(带有反引号的完整字符串)视为要匹配的列名,而你的数据框实际列名是aa aa(无反引号),因此触发了"找不到对象"的错误。上述方法都能绕过这个解析问题,正确匹配目标列。
正确运行结果
执行正确代码后,会返回每个aa aa分组的最后一行:
# Source: local data table [2 x 2] # Groups: aa aa # Call: `_DT1`[, .SD[.N], by = `aa aa`] `aa aa` `bb bb` <dbl> <int> 1 1 5 2 3 6
内容的提问来源于stack exchange,提问作者doraemon
相关产品推荐
相关产品推荐

