R中用于绘图目的的错误子集数据帧

问题描述

我有一个无法复制的数据框,并且[col1,col2,...]列为数值。 当我尝试绘制其中一列时:

hist(df[,"col1"])

我收到以下错误

Error in hist.default(df[,var]) : 'x' must be numeric*  

但是当像这样子化数据框时,我可以绘制它:

hist(df$col1]

在绘制箱形图时不会发生这种情况

解决方法

您的df可能不是数据帧,而是小玩意儿。

当您用一个列对数据框进行子集化时,您会得到一个向量。

mtcars[,'mpg']
[1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4 10.4
[17] 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7 15.0 21.4

这可以与hist配合使用:

hist(mtcars[,"mpg"])

与做相同

hist(mtcars$mpg)

但是,如果您有小标题,则按一列设置小标题将返回小标题。

df <- tibble::tibble(mtcars)
df[,"mpg"]

# A tibble: 32 x 1
#     mpg
#   <dbl>
# 1  21  
# 2  21  
# 3  22.8
# 4  21.4
# 5  18.7
# 6  18.1
# 7  14.3
# 8  24.4
# 9  22.8
#10  19.2
# … with 22 more rows

所以您会收到错误消息:

hist(df[,"mpg"])

hist.default(df [,“ mpg”])中的错误:“ x”必须为数字

在这种情况下,您应该使用[[来获取向量/

hist(df[["mpg"]])
,

如果它是tibble,我们也可以使用$

hist(df$mpg)