R 使用geom_箱线图产生的结果与基本箱线图()不同

R 使用geom_箱线图产生的结果与基本箱线图()不同,r,R,我正在使用gapminder数据集在数据框架上实践一些基本数据分析。 我想创建一个只有阿根廷和新西兰的数据子集,以便比较它们的值 install.packages("gapminder") library(gapminder) data("gapminder") > gapminder # A tibble: 1,704 x 6 country continent year lifeExp pop gdpPerca

我正在使用gapminder数据集在数据框架上实践一些基本数据分析。 我想创建一个只有阿根廷和新西兰的数据子集,以便比较它们的值

install.packages("gapminder")
library(gapminder)
data("gapminder")

    > gapminder
# A tibble: 1,704 x 6
   country     continent  year lifeExp      pop gdpPercap
   <fct>       <fct>     <int>   <dbl>    <int>     <dbl>
 1 Afghanistan Asia       1952    28.8  8425333      779.
 2 Afghanistan Asia       1957    30.3  9240934      821.
 3 Afghanistan Asia       1962    32.0 10267083      853.
 4 Afghanistan Asia       1967    34.0 11537966      836.
 5 Afghanistan Asia       1972    36.1 13079460      740.
 6 Afghanistan Asia       1977    38.4 14880372      786.
 7 Afghanistan Asia       1982    39.9 12881816      978.
 8 Afghanistan Asia       1987    40.8 13867957      852.
 9 Afghanistan Asia       1992    41.7 16317921      649.
10 Afghanistan Asia       1997    41.8 22227415      635.
# ... with 1,694 more rows

这就是我想要的,但是x轴也考虑了我没有选择的所有其他国家。很明显,他们的数据是空的,但这使绘图无法读取

相反,如果我使用相同的数据和ggplot上的所有内容,那么它可以完美地工作:

ggplot(data = df, mapping = aes(x=country, y=lifeExp)) + geom_boxplot()


在定义子集时,我是否有什么错误?使用boxplot()给我的印象是,子集保留了所有内容,但却为我不想为NULL的内容添加了值。

从问题中发布的代码开始

library(gapminder)
data("gapminder")

df <- subset(gapminder, country =="Argentina" | country == "New Zealand")
boxplot(lifeExp ~ country, df)
国家系数有142个等级。
解决办法是降低额外的级别

df2 <- df
df2$country <- droplevels(df2$country)
boxplot(lifeExp ~ country, df2)

df2如果
国家
是一个因素,其水平在分组后仍将存在。但只有标高,没有对应的行,因此,绘图显示空间,但不打印数据。试试看,
df$country工作起来很有魅力,谢谢!
library(gapminder)
data("gapminder")

df <- subset(gapminder, country =="Argentina" | country == "New Zealand")
boxplot(lifeExp ~ country, df)
str(df)
#tibble [24 × 6] (S3: tbl_df/tbl/data.frame)
# $ country  : Factor w/ 142 levels "Afghanistan",..: 5 5 5 5 5 5 5 5 5 5 ...
# $ continent: Factor w/ 5 levels "Africa","Americas",..: 2 2 2 2 2 2 2 2 2 2 ...
# $ year     : int [1:24] 1952 1957 1962 1967 1972 1977 1982 1987 1992 1997 ...
# $ lifeExp  : num [1:24] 62.5 64.4 65.1 65.6 67.1 ...
# $ pop      : int [1:24] 17876956 19610538 21283783 22934225 24779799 26983828 29341374 31620918 33958947 36203463 ...
# $ gdpPercap: num [1:24] 5911 6857 7133 8053 9443 ...
df2 <- df
df2$country <- droplevels(df2$country)
boxplot(lifeExp ~ country, df2)