web-dev-qa-db-fra.com

changer la colonne data.frame en lignes dans R

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

J'aimerais avoir ceci:

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

Si votre trame de données est vraiment dans ce format, alors tous vos vecteurs seront des vecteurs de caractères. Ou, vous avez essentiellement une matrice de caractères et vous pouvez le faire:

data.frame(t(df))

Il serait préférable, cependant, de le définir comme vous le souhaitez dès le départ

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

Vous pouvez aussi faire ça

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

Si vous vouliez donner des noms aux colonnes, vous pourriez le faire

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

Parfois, si j'utilise read.DIF de données Excel, les données sont transposées. Est-ce ainsi que vous avez obtenu les données d'origine? Si oui, vous pouvez appeler

read.DIF(filename, transpose = T)

pour obtenir les données dans la bonne orientation.

24
adamleerich

Je recommande vraiment data.table approche sans étapes manuelles car elles sont sujettes aux erreurs

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

Production

  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 (rétroportages)
OS: Debian 8.7