两列(和重命名列)的tidyr排列值

两列(和重命名列)的tidyr排列值,r,dplyr,mutate,spread,R,Dplyr,Mutate,Spread,我正试图建立代码从,我很抱歉,如果这是多余的其他职位,并将感谢被指向这些职位,如果他们在那里 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)) c

我正试图建立代码从,我很抱歉,如果这是多余的其他职位,并将感谢被指向这些职位,如果他们在那里

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
但是我想

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

  • 基于来自
    =
    value1
    value2

  • 我意识到我想要的输出将导致更多的NAs行,就像上面的排列一样,但这没关系

    在按“类别”创建序列列后,我们可以使用
    pivot\u wide
    。由于
    pivot\u更宽
    可以从
    列中获取多个
    value\u,并将其作为向量传递,可以是带引号的,也可以是不带引号的

    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
    
    库(dplyr)
    图书馆(tidyr)
    示例%>%
    组别(类别)%>%
    变异(rn=行数())%>%
    解组%>%
    枢轴(名称从=类别,值从=c(值1,值2))
    #一个tibble:3x7
    #rn值1_a值1_b值1_c值2_a值2_b值2_c
    #                          
    #1     1        1        2        3       10       20       30
    #2     2        4        5        6       40       50       60
    #3     3        7        8        9       70       80       90
    
      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
    
    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
    
    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
    
    library(dplyr)
    library(tidyr)
    example %>% 
      pivot_wider(names_from = category,
                  values_from = c(value1, value2)) %>% 
      unnest()