r - 基于多列重塑数据集
问题描述
我之前重塑了数据,但单元格总是可以由两个变量来识别。这在我目前的数据中是不可能的。我的数据摘录如下所示。完整的数据集涵盖更多国家和年份。
国家 | 害怕犯罪 | 全部的 | 2007年 | 2009 | 2010 |
---|---|---|---|---|---|
阿根廷 | 全部或几乎所有时间 | 37 | 37 | 33 | 27 |
阿根廷 | 有时 | 34 | 42 | 35 | 40 |
阿根廷 | 偶尔 | 18 | 14 | 23 | 23 |
阿根廷 | 绝不 | 11 | 6 | 8 | 10 |
阿根廷 | 不知道/没有答案 | 0 | 1 | 1 | 0 |
玻利维亚 | 全部或几乎所有时间 | 38 | 35 | 36 | 34 |
玻利维亚 | 有时 | 36 | 40 | 41 | 40 |
玻利维亚 | 偶尔 | 17 | 17 | 18 | 18 |
玻利维亚 | 绝不 | 8 | 6 | 4 | 6 |
玻利维亚 | 不知道/没有答案 | 1 | 1 | 0 | 1 |
我需要这种格式的数据:
年 | 国家 | 全部或几乎所有时间 | 有时 | 偶尔 | 绝不 | 不知道/没有答案 | |
---|---|---|---|---|---|---|---|
有没有人有办法解决吗?十分感谢!
解决方案
library(dplyr)
library(tidyr)
dat %>%
pivot_longer(
cols = -c(Country, `Fear of Crime`),
names_to = "Year"
) %>%
pivot_wider(
id_cols = c(Year, Country),
names_from = `Fear of Crime`,
values_from = value
)
# A tibble: 6 x 7
# Year Country All Sometimes Occasionally Never `Don't know`
# <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 2007 Argentina 52.0 29.7 52.1 34.2 59.9
#2 2009 Argentina 52.8 38.1 42.0 73.5 42.9
#3 2010 Argentina 56.2 64.6 31.0 71.6 32.1
#4 2007 Bolivia 36.8 37.4 31.4 45.0 56.3
#5 2009 Bolivia 53.2 52.8 62.8 56.1 59.9
#6 2010 Bolivia 42.4 45.1 67.4 55.0 58.1
数据:
dat <- tibble(
Country = rep(c("Argentina", "Bolivia"), each = 5),
`Fear of Crime` = rep(c("All", "Sometimes", "Occasionally", "Never", "Don't know"), 2),
`2007` = rnorm(10, 50, 10),
`2009` = rnorm(10, 50, 10),
`2010` = rnorm(10, 50, 10)
)