【问题标题】:tidyr spread values values from two columns (and rename columns)tidyr 传播来自两列的值(并重命名列)
【发布时间】:2020-02-04 19:03:14
【问题描述】:

我正在尝试构建来自 R - tidyr - mutate and spread multiple columns 的代码,如果这与其他帖子多余,我很抱歉,如果它们在那里,我将不胜感激!

example <- data.frame(category = c("a", "b", "c", "a", "b", "c", "a", "b", "c"),
                      value1 = c(1,2,3,4,5,6,7,8,9),
                      value2 = c(10,20,30,40,50,60,70,80,90))

  category value1 value2
1        a      1     10
2        b      2     20
3        c      3     30
4        a      4     40
5        b      5     50
6        c      6     60
7        a      7     70
8        b      8     80
9        c      9     90

我了解如何调整它以从 value1value2 获取值

example %>% 
spread(category, value1)
  value2  a  b  c
1     10  1 NA NA
2     20 NA  2 NA
3     30 NA NA  3
4     40  4 NA NA
5     50 NA  5 NA
6     60 NA NA  6
7     70  7 NA NA
8     80 NA  8 NA
9     90 NA NA  9

但我愿意

  1. 改变类别列的名称以反映 1 和 2 值,因此每个类别有两列

    1. 根据values_from = value1value2 填充列值
a_v1  a_v2  b_v1  b_v2  c_v1  c_v2
1     10    2     20    3     30
4     40    5     50    6     60
7     70    8     80    9     90

我意识到我想要的输出会导致更多行带有 NA,就像上面的展开一样,但这没关系!

【问题讨论】:

    标签: r dplyr spread


    【解决方案1】:

    我们可以在按“类别”创建序列列后使用pivot_wider。由于pivot_wider 可以接受多个value_from 列,因此将其作为向量传递,无论是带引号的还是不带引号的

    library(dplyr)
    library(tidyr)
    example %>% 
        group_by(category) %>%
        mutate(rn = row_number()) %>%
        ungroup %>%
       pivot_wider(names_from = category, values_from = c(value1, value2))
    # A tibble: 3 x 7
    #     rn value1_a value1_b value1_c value2_a value2_b value2_c
    #  <int>    <dbl>    <dbl>    <dbl>    <dbl>    <dbl>    <dbl>
    #1     1        1        2        3       10       20       30
    #2     2        4        5        6       40       50       60
    #3     3        7        8        9       70       80       90
    

    【讨论】:

      【解决方案2】:
      library(dplyr)
      library(tidyr)
      example %>% 
        pivot_wider(names_from = category,
                    values_from = c(value1, value2)) %>% 
        unnest()
      

      【讨论】:

        猜你喜欢
        • 2016-05-21
        • 2016-02-08
        • 2015-08-16
        • 1970-01-01
        • 2016-10-11
        • 1970-01-01
        • 2016-10-14
        • 2020-01-19
        • 1970-01-01
        相关资源
        最近更新 更多