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