簡體   English   中英

如何轉置數據框,以便行和列在r中切換?

[英]How can I transpose my dataframe so that the rows and columns switch in r?

我有一個看起來像這樣的數據框(簡化):

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的新手。

有兩種方法可以執行此操作。 第一個是使用t來轉置數據幀,就好像它是矩陣一樣(實際上t的結果是矩陣,而不是數據幀)。

另一個選擇是采用整潔的數據方法,並將tidyr::spreadtidyr::gather一起使用。 兩者都具有相似的結果,盡管第二種方法更具通用性,因為它可以部分應用。 還要注意,使用t ,第一列(類型為chr )將成為新矩陣的第一行,因此,整個矩陣將轉換為chr矩陣,而gather + spread會使列保持數字。


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

使用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/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM