使用dplyr按字符型列分组数据框报错,求解决方法
解决dplyr按字符型列分组的错误
嘿,我来帮你搞定这个分组出错的问题!
你遇到的错误根源很明确:你把单个字符型列向量(frazy_i_lp_new_Full$lp)直接传给了group_by(),但group_by()的设计是要作用在整个数据框上的,不是单独的列,所以才会抛出“no applicable method for 'group_by_' applied to an object of class 'character'”这个报错。
正确的写法有这几种:
1. 用管道符的标准写法(推荐)
把整个数据框通过管道传递给group_by(),直接指定列名即可,字符型列完全没问题:
abc1 <- frazy_i_lp_new_Full %>% group_by(lp) %>% summarise(wysz = sum(`ilośc wyszukań`))
管道符%>%会自动把左边的数据框作为第一个参数传给右边的group_by(),这样函数就能正确识别数据框里的列,不管类型是字符、数值还是因子。
2. 不用管道的写法
如果不习惯用管道,也可以直接把数据框作为group_by()的第一个参数:
abc1 <- summarise(group_by(frazy_i_lp_new_Full, lp), wysz = sum(`ilośc wyszukań`))
3. 动态指定列名的场景(如果列名是变量)
要是你需要用字符变量来动态指定分组列(比如列名存在某个变量里),可以用.data代词或者group_by_at():
# 用.data代词 target_col <- "lp" abc1 <- frazy_i_lp_new_Full %>% group_by(.data[[target_col]]) %>% summarise(wysz = sum(`ilośc wyszukań`)) # 或者用group_by_at() abc1 <- frazy_i_lp_new_Full %>% group_by_at(target_col) %>% summarise(wysz = sum(`ilośc wyszukań`))
只要确保group_by()接收的是完整数据框,而不是单独的列向量,就能顺利按字符型列完成分组啦。
内容的提问来源于stack exchange,提问作者Sebastian




