代码之家  ›  专栏  ›  技术社区  ›  cremorna

转换数据结构

  •  0
  • cremorna  · 技术社区  · 7 年前

    问题: 如何从现有数据集生成新数据集。

    我有大量的数据,下面我提供了一个简化的版本。这些数据是关于个人的,我知道他们的性别、原籍国以及他们工作的部门和职业。

    我想: 1.创建一列,其中存储了所有扇区X占用组合。 2.对于每个此类X部门职业,计算有多少女性,多少男性,以及每个国家有多少女性。

    id      <- c(1,2,3,4,5)
    occupation <- c(11,12,11,12,11)
    sector <- c("a", "b", "c", "a", "b")
    sex     <- c(0,1,0,1,0)
    country <- c(1,2,3,2,1)
    data    <- data.frame(id, occupation, sector, sex, country)
    
    id  occupation sector sex country 
    1   11          a      0    1       
    2   12          b      1    2       
    3   11          a      0    3        
    4   12          a      1    2        
    5   11          b      0    1        
    

    这就是我想要得到的:

      occXsector sex0 sex1 country1 country2 country3
    1   11-a     0    2    1        0        1
    2   11-b     0    1    1        0        0
    3   12-a     1    0    0        1        0
    4   12-b     1    0    0        1        0
    

    任何帮助都将不胜感激!

    1 回复  |  直到 7 年前
        1
  •  3
  •   CPak    7 年前

    你需要清理你的输入/输出,也就是说,你显示的预期输出与你提供的输入没有意义,但试试看

    library(dplyr)
    library(tidyr)
    data %>%
      mutate(occXsector = paste(occupation, sector, sep="-")) %>%
      gather(key, value, sex, country) %>%
      mutate(newvalue = paste(key, value, sep="")) %>%
      group_by(occXsector) %>%
      count(newvalue) %>%
      spread(newvalue, n, fill=0)
    
    # A tibble: 5 x 6
    # Groups:   occXsector [5]
      occXsector country1 country2 country3  sex0  sex1
    *      <chr>    <dbl>    <dbl>    <dbl> <dbl> <dbl>
    1       11-a        1        0        0     1     0
    2       11-b        1        0        0     1     0
    3       11-c        0        0        1     1     0
    4       12-a        0        1        0     0     1
    5       12-b        0        1        0     0     1