【发布时间】:2021-05-18 05:53:07
【问题描述】:
我正在使用 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
我正在对我想要的信息进行子集化:
df <- subset(gapminder, country =="Argentina" | country == "New Zealand")
> df
# A tibble: 24 x 6
country continent year lifeExp pop gdpPercap
<fct> <fct> <int> <dbl> <int> <dbl>
1 Argentina Americas 1952 62.5 17876956 5911.
2 Argentina Americas 1957 64.4 19610538 6857.
3 Argentina Americas 1962 65.1 21283783 7133.
4 Argentina Americas 1967 65.6 22934225 8053.
5 Argentina Americas 1972 67.1 24779799 9443.
6 Argentina Americas 1977 68.5 26983828 10079.
7 Argentina Americas 1982 69.9 29341374 8998.
8 Argentina Americas 1987 70.8 31620918 9140.
9 Argentina Americas 1992 71.9 33958947 9308.
10 Argentina Americas 1997 73.3 36203463 10967.
# ... with 14 more rows
如您所见(或者看起来就是这样),这很有效
现在我想创建一个简单的箱线图来快速分析一些值,但是当我使用 boxplot() 和 geom_boxplot 进行绘制时,我得到了两个不同的结果:
boxplot(lifeExp ~ country)
这是我想要的,但 x 轴也考虑了我没有选择的所有其他国家。显然他们的数据是空的,但它使情节不可读。
相反,如果我在 ggplot 上使用相同的数据和所有内容,那么它可以完美运行:
ggplot(data = df, mapping = aes(x=country, y=lifeExp)) + geom_boxplot()
在定义子集时我做错了什么吗?使用 boxplot() 给我的印象是子集保留了所有内容,但将我不想为 NULL 的内容设置为值。
【问题讨论】:
-
如果
country是一个因素,它的水平在子集后仍然存在。但只有级别,没有与它们对应的行,因此,该图显示了空格但没有绘制数据。试试df$country <- droplevels(df$country)。 -
工作就像一个魅力,谢谢!
标签: r