首页 > 解决方案 > 基于多列重塑数据集

问题描述

我之前重塑了数据,但单元格总是可以由两个变量来识别。这在我目前的数据中是不可能的。我的数据摘录如下所示。完整的数据集涵盖更多国家和年份。

国家 害怕犯罪 全部的 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

我需要这种格式的数据:

国家 全部或几乎所有时间 有时 偶尔 绝不 不知道/没有答案

有没有人有办法解决吗?十分感谢!

标签: rdataframereshapetidyr

解决方案


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)
)

推荐阅读