2017-06-06 27 views
1

我有一个数据帧(简体),看起来像这样:如何转置我的数据框,以便行和列切换到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很陌生。

回答

1

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

另一种选择是采取整洁的数据方法,并使用tidyr::spread以及tidyr::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 
0

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

+1

不太虽然因为是出现了蓝色 – amonk

+0

好点的存在的'Location'列名。 –

相关问题