我将直接从代码开始,这应该使目标明确:
library(gapminder)
head(gapminder)
# A tibble: 6 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.
将国家/地区名称保存在另一个变量中:
y <- unique(gapminder$country, incomparables = FALSE)
length(y)
[1] 142
df.names <- paste(y, sep = "")
预期输出:
我想为year
有142列+1,并且只有pop
值。我正在尝试的代码是这样的:
for(i in 1:length(y)){
d.frame[,i] <- gapminder$pop %>% filter(gapminder$country==y[i])
assign(df.names[i], d.frame)
}
此代码尝试分配与行中每个pop
相对应的year
值,并且列名是其对应的country
。代码中未使用year
,因为我稍后会添加该值,现在仅根据条件选择country
和pop
值。由于该表中的年份是重复的,因此我希望该列仅显示一次(以后)。因此,最终表必须为12 * 143表(12行和143列)。这不起作用。
有什么想法吗?如果需要,我也希望对设计和结构提出任何建议。
答案 0 :(得分:1)
我认为这就是您想要的:
gapminder %>%
select(country, pop, year) %>%
spread(country, pop)
这每年为您提供一行,每个国家为您提供一列,其中包含该年的人口。
({spread
是{tidyr}软件包的一部分。)