如何转置我的数据帧以使行和列在r中切换? [英] How can I transpose my dataframe so that the rows and columns switch in r?

查看:11
本文介绍了如何转置我的数据帧以使行和列在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

这篇关于如何转置我的数据帧以使行和列在r中切换?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆