programing

데이터 프레임 전치

lastmoon 2023. 6. 21. 22:57
반응형

데이터 프레임 전치

큰 데이터 프레임을 전환해야 하기 때문에 다음을 사용했습니다.

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...)을 변환해야 합니다.

이름 열이 있는 동안에는 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

사용할 수 있습니다.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)
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))

이점 활용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

tidyr을 사용하면 데이터 프레임을 "pivot_longer"와 "pivot_wider"로 바꿀 수 있습니다.

널리 사용되는 mtcar 데이터 집합을 바꾸려면 먼저 행 이름을 열로 변환해야 합니다("rowname"이라는 이름의 새 열이 rowname_to_column 함수).

library(tidyverse)

mtcars %>% 
rownames_to_column() %>% 
pivot_longer(!rowname, names_to = "col1", values_to = "col2") %>% 
pivot_wider(names_from = "rowname", values_from = "col2")

전치 행렬에 다른 이름을 지정할 수 있습니다.

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

언급URL : https://stackoverflow.com/questions/6778908/transpose-a-data-frame

반응형