无法使用dplyr数据操作绘制直方图:'x'必须是数字

时间:2018-05-07 20:02:07

标签: r dplyr

我是使用R进行数据操作的新手,特别是dplyr,我试图编写一行代码来生成直方图,它给了我一个'x'必须是数字的错误,但我可以告诉'x '是数字。

我尝试运行的代码版本如下,并带有相应的错误:

mydata %>% filter(Type==1) %>% select(Amount) %>% hist()
Error in hist.default(.) : 'x' must be numeric

如果我将其更改为如下的箱形图,则可以完美地运行:

mydata %>% filter(Type==1) %>% select(Amount) %>% boxplot()

如果我刚跑:

mydata %>% filter(Type==1) %>% select(Amount)

我得到以下结果,将值显示为dbl:

# A tibble: 898 x 1
Amount
  <dbl>
 1 -1304.  
 2  -741.  
 3   -38.0 
 4    -1.13
 5     0.  
 6     0.  
 7     0.  
 8     0.  
 9     0.  
10     0.  
# ... with 888 more rows**strong text**

此外,如果我运行以下代码,我会得到我正在寻找的直方图,但我不确定为什么我的原始代码行不起作用。

tmp <- mydata %>% filter(Type==1) %>% select(Amount)
hist(tmp$Amount)

我确信这很简单,但我认为使用select(Amount)语句会将该值传递给hist()函数,但这似乎并没有发生。对我来说奇怪的部分是我可以把它改成一个盒子图,它工作正常。我的原始代码有什么问题吗?

1 个答案:

答案 0 :(得分:2)

?hist?boxplothist接受数字向量作为数据,而boxplot可以接受数字向量或列表。

要从管道返回数字向量,您可以使用pull将列提取为向量,然后可以将其传递给hist以进行绘图:

mydata %>% filter(Type==1) %>% pull(Amount) %>% hist()