데이터 프레임 전치


107

큰 데이터 프레임을 전치해야하므로 다음을 사용했습니다.

df.aree <- t(df.aree)
df.aree <- as.data.frame(df.aree)

이것이 내가 얻는 것입니다.

df.aree[c(1:5),c(1:5)]
                         10428        10760        12148        11865
    name                M231T3       M961T5       M960T6      M231T19
    GS04.A        5.847557e+03 0.000000e+00 3.165891e+04 2.119232e+04
    GS16.A        5.248690e+04 4.047780e+03 3.763850e+04 1.187454e+04
    GS20.A        5.370910e+03 9.518396e+03 3.552036e+04 1.497956e+04
    GS40.A        3.640794e+03 1.084391e+04 4.651735e+04 4.120606e+04    

내 문제는 첫 번째 행을 열 이름으로 사용해야하므로 제거해야하는 새 열 이름 (10428, 10760, 12148, 11865)입니다.

col.names()기능을 사용해 보았지만 필요한 것을 얻지 못했습니다.

제안 사항이 있습니까?

편집하다

제안 해 주셔서 감사합니다 !!! 그것을 사용하여 다음을 얻습니다.

df.aree[c(1:5),c(1:5)]
                        M231T3       M961T5       M960T6      M231T19
    GS04.A        5.847557e+03 0.000000e+00 3.165891e+04 2.119232e+04
    GS16.A        5.248690e+04 4.047780e+03 3.763850e+04 1.187454e+04
    GS20.A        5.370910e+03 9.518396e+03 3.552036e+04 1.497956e+04
    GS40.A        3.640794e+03 1.084391e+04 4.651735e+04 4.120606e+04
    GS44.A        1.225938e+04 2.681887e+03 1.154924e+04 4.202394e+04

이제 인자 열의 행 이름 (GS ..)을 변환해야합니다 ....


1
시도해 보셨습니까 colnames(df.aree)<-df.aree[1,];df.aree<-df.aree[2:nrow(df.aree),]?

5
데이터 프레임은 자연스럽게 전치 될 수 없습니다. 당신의 것이 있다면 아마도 대신 매트릭스 형태 여야합니다.
Richie Cotton

동의하다; t데이터 프레임도 상당히 비효율적입니다. 가능하면 행렬을 사용하십시오.
mbq

5
문자열 열을 포함하는 data.frame을 전치하면 모든 값이 문자열로 바뀝니다! 안좋다. 해결 방법은 아래 내 대답을 참조하십시오.
Tommy

답변:


109

name 열이있는 동안에는 data.frame을 바꾸지 않는 것이 좋습니다. 그러면 모든 숫자 값이 문자열로 바뀝니다!

다음은 숫자를 숫자로 유지하는 솔루션입니다.

# first remember the names
n <- df.aree$name

# transpose all but the first column (name)
df.aree <- as.data.frame(t(df.aree[,-1]))
colnames(df.aree) <- n
df.aree$myfactor <- factor(row.names(df.aree))

str(df.aree) # Check the column types

49
df.aree <- as.data.frame(t(df.aree))
colnames(df.aree) <- df.aree[1, ]
df.aree <- df.aree[-1, ]
df.aree$myfactor <- factor(row.names(df.aree))

@Riccardo 그렇다면 옆에있는 회색 체크 표시를 클릭하여 답변을 수락하십시오.
mbq

4
이것의 한 가지 문제는 열 이름이 요인 수준의 숫자 표현을 취한다는 것입니다.
Harry Palmer

48

라이브러리 의 transpose기능을 사용할 수 있습니다 data.table. 유지 간단하고 빠른 솔루션 numeric으로 값을 numeric.

library(data.table)

# get data
  data("mtcars")

# transpose
  t_mtcars <- transpose(mtcars)

# get row and colnames in order
  colnames(t_mtcars) <- rownames(mtcars)
  rownames(t_mtcars) <- colnames(mtcars)

4
또한 data.table에 이름을 설정 setnames(t_mtcars, rownames(mtcars))하는 방법이 될 것입니다 data.table(그리고 data.table객체를 사용하는 경우를 설정하지 않을 것입니다 rownames)
SymbolixAU

이것이 최고의 솔루션입니다! +1.
HelloWorld

1

다음을 활용하십시오 as.matrix.

# keep the first column 
names <-  df.aree[,1]

# Transpose everything other than the first column
df.aree.T <- as.data.frame(as.matrix(t(df.aree[,-1])))

# Assign first column as the column names of the transposed dataframe
colnames(df.aree.T) <- names
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.