データフレームを転置する


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
データフレームは、当然のことながら、転置可能である必要はありません。もしあなたがそうなら、おそらくそれは代わりにマトリックス形式でなければなりません。
リッチーコットン

同意する; tデータフレームの処理も非常に非効率的です。可能であれば、行列を使用してください。
mbq 2011

5
文字列列を含むdata.frameを転置すると、すべての値が文字列に変わります。良くない。回避策については、以下の私の回答を参照してください。
トミー

回答:


109

名前列が含まれている間は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 2011

4
これに関する1つの問題-列名は因子レベルの数値表現をとります。
Harry Palmer

48

ライブラリtransposeから関数を使用できますdata.tablenumeric値をに保つシンプルで高速なソリューション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
また、setnames(t_mtcars, rownames(mtcars))だろうdata.tabledata.table(および使用している場合に名前を設定する-way 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.