【问题标题】:How can I transpose my dataframe so that the rows and columns switch in r?如何转置我的数据框以使行和列在 r 中切换?
【发布时间】:2017-06-06 22:16:19
【问题描述】:

我有一个如下所示的数据框(简化):

Age, Kodiak, Banana, Banff, Montreal, Fairfax
Age_1, 5, 6 , 7, 9, 2 
Age_2, 7, 6, 4, 3, 2
Age_3, 5, 3, 8, 5, 9

我希望我的数据框看起来更像这样:

Location, Age_1, Age_2, Age_3
Kodiak, 5, 7, 5
Banana, 6, 6, 3
Banff, 7, 4, 8
Montreal, 9, 3, 5 
Fairfax, 2, 2, 9

我查看了转置函数,但对如何切换列和行有点困惑。我对 R 很陌生。

【问题讨论】:

    标签: r transpose


    【解决方案1】:

    有两种方法可以做到这一点。第一个是使用t 来转置数据帧,就好像它是一个矩阵一样(实际上t 的结果是一个矩阵,而不是一个数据帧)。

    另一种选择是采用整理数据方法并使用tidyr::spreadtidyr::gather。两者都有相似的结果,尽管第二个更通用,因为它可以部分应用。另请注意,当使用t 时,第一列(类型为chr)将成为新矩阵中的第一行,因此整个矩阵将转换为chr 矩阵,而gather+@987654329 @ 使列保持数字。


    library(tidyr)
    
    df <- read.table(text = "Age Kodiak Banana Banff Montreal Fairfax
    Age_1 5 6 7 9 2 
    Age_2 7 6 4 3 2
    Age_3 5 3 8 5 9", header = T)
    
    t(df)
    #>          [,1]    [,2]    [,3]   
    #> Age      "Age_1" "Age_2" "Age_3"
    #> Kodiak   "5"     "7"     "5"    
    #> Banana   "6"     "6"     "3"    
    #> Banff    "7"     "4"     "8"    
    #> Montreal "9"     "3"     "5"    
    #> Fairfax  "2"     "2"     "9"
    
    df %>%
      gather("location", "value", 2:ncol(df)) %>%
      spread(Age, value)
    #>   location Age_1 Age_2 Age_3
    #> 1   Banana     6     6     3
    #> 2    Banff     7     4     8
    #> 3  Fairfax     2     2     9
    #> 4   Kodiak     5     7     5
    #> 5 Montreal     9     3     5
    

    【讨论】:

      【解决方案2】:

      使用 t() 函数转置数据帧。

      例如:

      cars <- mtcars[1:5,1:4]
      cars
      
                         mpg cyl disp  hp
      Mazda RX4         21.0   6  160 110
      Mazda RX4 Wag     21.0   6  160 110
      Datsun 710        22.8   4  108  93
      Hornet 4 Drive    21.4   6  258 110
      Hornet Sportabout 18.7   8  360 175
      
      
      t(cars)
      
           Mazda RX4 Mazda RX4 Wag Datsun 710 Hornet 4 Drive Hornet Sportabout
      mpg         21            21       22.8           21.4              18.7
      cyl          6             6        4.0            6.0               8.0
      disp       160           160      108.0          258.0             360.0
      hp         110           110       93.0          110.0             175.0
      

      来源:https://www.r-statistics.com/tag/transpose/

      【讨论】:

      • 不完全是,因为突然出现了一个 Location 列名
      猜你喜欢
      • 1970-01-01
      • 2020-05-28
      • 2018-02-21
      • 2023-01-11
      • 2016-09-19
      • 1970-01-01
      • 2015-08-31
      • 2023-01-29
      • 2023-01-16
      相关资源
      最近更新 更多