2011-09-08 38 views
17
A <- c(1,6) 
B <- c(2,7) 
C <- c(3,8) 
D <- c(4,9) 
E <- c(5,0) 
df <- data.frame(A,B,C,D,E) 
df 
    A B C D E 
1 1 2 3 4 5 
2 6 7 8 9 0 

我想有這樣的:改變data.frame列到行中的R

df 
    1 2 
A 1 6 
B 2 7 
C 3 8 
D 4 9  
E 5 0 
+0

你是如何將數據轉化爲R的? – adamleerich

回答

20

如果你的數據幀確實是這種格式,那麼你所有的載體將是特徵向量。或者,你基本上有一個字符矩陣,你可以這樣做:

data.frame(t(df)) 

這將是更好,不過,只是把它定義你想要的方式得到去

df <- data.frame(c('A','B','C','D','E'), 
       c(1, 2, 3, 4, 5), 
       c(6, 7, 8, 9, 0)) 

你也可以做到這一點

df <- data.frame(LETTERS[1:5], 1:5, c(6:9, 0)) 

如果你想給的列名,你可以這樣做

df <- data.frame(L = LETTERS[1:5], N1 = 1:5, N2 = c(6:9, 0)) 

有時候,如果我使用Excel數據的read.DIF,數據會被轉置。這是你如何獲得原始數據?如果是這樣,您可以撥打

read.DIF(filename, transpose = T) 

以正確的方向獲取數據。

+0

完成了,感謝一堆 – Travis

+7

應該剛剛說過'as.data.frame(t(df))'。這不是在「字符」模式。 –

+0

幫助了我很多! – greg121

1

我真的建議data.table方法無需手動步驟becauce它們是容易出錯的

A <- c(1,6) 
B <- c(2,7) 
C <- c(3,8) 
D <- c(4,9) 
E <- c(5,0) 
df <- data.frame(A,B,C,D,E) 
df 

library('data.table') 
dat.m <- melt(as.data.table(df, keep.rownames = "Vars"), id.vars = "Vars") # https://stackoverflow.com/a/44128640/54964 

dat.m 

輸出

A B C D E 
1 1 2 3 4 5 
2 6 7 8 9 0 
    Vars variable value 
1: 1  A  1 
2: 2  A  6 
3: 1  B  2 
4: 2  B  7 
5: 1  C  3 
6: 2  C  8 
7: 1  D  4 
8: 2  D  9 
9: 1  E  5 
10: 2  E  0 

R:3.4.0(反向移植)
OS:Debian的8.7