23

Rでdata.frameを転置し、列の1つを新しい転置テーブルのヘッダーに設定するための最良の方法は何ですか?これを行う方法を以下にコーディングしました。私はまだRに慣れていないので、コードを改善するための提案と、よりRに似た代替案を希望します。私のソリューションも残念ながら少しハードコーディングされています(つまり、新しい列見出しは特定の場所にあります)。

# Assume a data.frame called fooData
# Assume the column is the first column before transposing

# Transpose table
fooData.T <- t(fooData)

# Set the column headings
colnames(fooData.T) <- test[1,]

# Get rid of the column heading row
fooData.T <- fooData.T[2:nrow(fooData.T), ]

#fooData.T now contains a transposed table with the first column as headings
4

7 に答える 7

26

さてあなたは使用することによって2つのステップでそれを行うことができます

# Transpose table YOU WANT
fooData.T <- t(fooData[,2:ncol(fooData)])

# Set the column headings from the first column in the original table
colnames(fooData.T) <- fooData[,1] 

結果はおそらくあなたが知っているマトリックスです、それは転置時のクラスの問題によるものです。転置ステップでの命名機能が不足していることを考えると、これを行うための単一行の方法はないと思います。

于 2011-07-11T03:51:36.877 に答える
1

これが、グループ化列と列を持つdplyraに使用する2セントです。data.frameid

id_transpose <- function(df, id){
  df %>% 
    ungroup() %>% 
    select(where(is.numeric)) %>% 
    t() %>% 
    as_tibble() %>% 
    setNames(., df %>% pull({{id}}))
}
于 2021-01-07T14:55:51.507 に答える
1

あなたは一行でさえそれをすることができます:

fooData.T <- setNames(data.frame(t(fooData[,-1])), fooData[,1])

すでに素晴らしい答えがあります。ただし、この回答は、コードを簡潔にすることを好む人には役立つ場合があります。

于 2021-06-28T23:38:08.457 に答える
0

ここtiyderse/dplyrから取られた別のアプローチがあります。

mtcars %>%
  tibble::rownames_to_column() %>%  
  tidyr::pivot_longer(-rowname) %>% 
  tidyr::pivot_wider(names_from=rowname, values_from=value)
于 2021-06-29T13:54:14.977 に答える
0

transposefromを使用しdata.table、転置後にヘッダーとして使用する列が変数であるとしますgroup

fooData.transpose = fooData %>% transpose (make.name = "group")

さらに、転置された列名に名前を割り当てる場合は、引数を使用しますkeep.names

fooData.transpose = fooData %>% transpose (make.name = "group", keep.names = "column_name")
于 2021-10-05T19:21:20.393 に答える
0

パッケージrotate_dfからデータフレームを転置するための専用関数が追加されました。目的の名前が元のdfの最初の列にある場合は、引数sjmiscのおかげでこれを1行で実現できます。cn

データフレームの例を次に示します。

df <- data.frame(name = c("Mary", "John", "Louise"), class = c("A", "A", "B"), score = c(40, 75, 80))

df
#    name class score
#1   Mary     A    40
#2   John     A    75
#3 Louise     B    80

で関数を実行するcn = T

rotate_df(df, cn = T)

#      Mary John Louise
#class    A    A      B
#score   40   75     80
于 2022-01-12T14:16:10.090 に答える
-1

これと同様の問題がありました。長い形式の要素の変数があり、各要素を新しい列見出しにしたかったのです。統計ライブラリから「アンスタック」を使用すると、1つのステップでそれを実行しました。ヘッダーとして必要な列が要因でない場合は、リシェイプライブラリからの「キャスト」が機能する可能性があります。

于 2012-08-22T14:07:36.263 に答える