使用dplyr数据操作绘制直方图报错:'x'必须为数值型
解决dplyr管道后hist()报错'x'必须为数值型的问题
嗨,我来帮你捋清楚这个问题~
你遇到的报错核心原因很简单:dplyr的select()返回的是一个数据框(或者tibble),而hist()函数需要的是纯数值向量。你用select(Amount)拿到的不是单独的Amount列数值,而是只包含这一列的数据框,所以hist()不认它;而boxplot()刚好支持直接处理数据框,所以能正常运行。
给你几个简单的解决方案:
- 方法1:用
pull()替代select(),pull()会直接把指定列提取成数值向量,完美适配hist():
mydata %>% filter(Type==1) %>% pull(Amount) %>% hist()
- 方法2:如果非要用
select(),可以通过索引提取向量:
# 用[[索引提取第一列(也就是Amount) mydata %>% filter(Type==1) %>% select(Amount) %>% .[[1]] %>% hist() # 或者直接用$提取Amount列 mydata %>% filter(Type==1) %>% .$Amount %>% hist()
- 方法3:如果你习惯用tidyverse的可视化工具,用ggplot2画直方图更贴合dplyr的管道风格:
library(ggplot2) mydata %>% filter(Type==1) %>% ggplot(aes(x = Amount)) + geom_histogram(bins = 15) # 可以自己调整bins数量
内容的提问来源于stack exchange,提问作者user1723699
相关产品推荐
相关产品推荐

