【问题标题】:How do I specify a particular column order in pivot_wider如何在 pivot_wider 中指定特定的列顺序
【发布时间】:2020-02-29 07:04:38
【问题描述】:

数据帧indrur 由变量S447.1 组成,表示传输模式。我使用dplyr 按变量分组并将其转换为宽格式。

library(dplyr)      
    indrurmodes<-indrur %>% 
          group_by(V024,V025,V190) %>%count(S447.1) %>% 
          pivot_wider(names_from = S447.1,values_from = n, values_fill = list(n = 0))

它给了我以下输出。但我希望列按特定顺序 - GovtAmb,OthAmb,Jeep,Tempo,Scooter,Bus,Cart,Foot,NA。我必须为多个过滤的数据帧执行上述代码。每次,我都会得到不同的订单。这使得在我使用列索引作为参考的情况下执行进一步的算术运算变得困难。如何维护所需的列顺序?

       V024     V025    V190 GovtAmb Jeep   Tempo Foot  NA     OthAmb Scooter  Bus  Cart
3   Andaman     Rural   Middle  67   21     16     16   615     2     3        4      0
4   Andaman     Rural   Richer  66   39     20     3    617     2     1        0      0
5   Andaman     Rural   Richest 21   18     5      2    278     0     2        5      1
6   Andhra      Rural   Poorest 25   0      35     4    294     5     0        6      0

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    你有两个选择。

    library(dplyr)
    library(tidyr)
    
    #Order of the columns you want
    vec <- c("GovtAmb","OthAmb","Jeep","Tempo","Scooter","Bus","Cart","Foot",NA)
    

    1) 使用pivot_wider

    pivot_wider 按出现的顺序返回列。所以你可以在使用pivot_wider之前按照你想要的顺序arrange数据。

    indrur %>% 
       group_by(V024,V025,V190) %>%
       count(S447.1) %>% 
       arrange(match(S447.1, vec)) %>%
       pivot_wider(names_from = S447.1,values_from = n, values_fill = list(n = 0))
    

    2) 使用旧的spread,它根据因子水平给出列顺序。

    indrur %>% 
      group_by(V024,V025,V190) %>%
      count(S447.1) %>% 
      mutate(S447.1 = factor(S447.1, levels = vec)) %>%
      spread(S447.1,n,fill = 0)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-03
      • 1970-01-01
      • 1970-01-01
      • 2018-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多