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

r-分组依据并为分组结果创建新列

  •  1
  • mrtyormaa  · 技术社区  · 5 年前

    这个问题已经有了答案:

    我的测试数据如下

    > date <- c('11:00', '12:00', '13:00', '11:00', '13:00', '13:00', '15:00')
    > zone <- c('a', 'a', 'a', 'b', 'b', 'c', 'c')
    > val <- c(1,2,3,4,5,6,7)
    > test.data <- data.frame(date, zone, val)
    > test.data
       date zone val
    1 11:00    a   1
    2 12:00    a   2
    3 13:00    a   3
    4 11:00    b   4
    5 13:00    b   5
    6 13:00    c   6
    7 15:00    c   7
    

    我需要先将结果分组 date . 然后对每一个独特的 zone 将添加新列。该列的值是从该列中选取的 val ,如果缺少,则为0。

    预期结果:

    result
       date zone_a zone_b zone_c
    1 11:00      1      4      0
    2 12:00      2      0      0
    3 13:00      3      5      6
    4 15:00      0      0      7
    
    1 回复  |  直到 5 年前
        1
  •  1
  •   akrun    5 年前

    mutate spread

    library(tidyverse)
    test.data %>%
        mutate(zone = str_c("zone_", zone)) %>% 
        spread(zone, val, fill = 0)