web-dev-qa-db-ja.com

row.names属性を使用してRのデータフレームの行を順序付けるにはどうすればよいですか?

ランダムフォレストを作成し、テストセットのクラスを予測しました。これらのクラスはデータフレーム内で正常に動作しています。

 row.namesクラス
 564028 1 
 275747 1 
 601137 0 
 922930 1 
 481988 1 
。 .. 

_row.names_属性は、プロセス中に行の順序をスクランブルするさまざまな操作を行う前に、どの行がどの行であるかを示します。ここまでは順調ですね。

次に、予測の正確さについて一般的な感触を得たいと思います。これを行うには、このデータフレームを取得し、_row.names_属性に従って昇順で並べ替える必要があります。この方法で、行ごとに観測値をラベルと比較できます。ラベルはすでに知っています。

そのような基本的な質問をすることを許してくれますが、私の人生にとっては、そのような些細な仕事をする方法に関する良い情報源を見つけることができません。

ドキュメンテーションは私に以下を懇願します:

行名の整数値セットを取得する必要がある場合は、attr(x, "row.names")を使用します。

しかし、これによりNULLのみが残ります。

私の質問は、どのようにして_row.names_を使用できますか?これは何のためにあるのでしょうか?

18
Matt O'Brien

これは私のために働いた:

new_df <- df[ order(row.names(df)), ]
18
cburghard

どのソリューションも実際には機能しません。そのはず:

df[ order(as.numeric(row.names(df))),]#データフレームはdfと仮定

rの行名は「文字」であるため、as.numericの部分が欠落している場合、データを1、10、11 ...のように配置します。

22
ToNoY

完全を期すために:

@BondedDustの答えはrownames属性に対して完全に機能しますが、この例ではrownames属性を使用していません。質問で提供される出力は、「row.names」という名前の列の使用を示していますが、これは同じものではありません(すべて@BondedDustのコメントにリストされています)。 ここでは、あなたの質問で与えられた例の「row.names」列でソートしたい場合の答えです(これに関する別の投稿があります、 ここ )にあります。この回答は、「df」という名前のデータフレームと「row.names」という名前の1つの列を使用していることを前提としています。

ordered.df <- df[order(df$row.names),]   #this orders the df by the "row.names" column

または、最初の列で並べ替えるには(まだ例を使用している場合は同じ):

ordered.df <- df[order(df[,1]),]         #this orders the df by the first column

これが役立つことを願っています!

2
mfloren

これは、 "["関数がrownames()に一致する可能性のあるベクトルの字句順に表示するため、ほぼ自動的に行われます。

df[ rownames(df) , ]

あなたはそれを使用する必要があると思ったかもしれません:

df[ order(rownames(df)) , ]

".

1
42-

これを使用してdfを単純にソートできます。

df <- df[sort(rownames(df)),]

そして、あなたがしたいことをしてください!

0

データフレームの名前が「df」であると仮定すると、dfの行名と次の1行のコードの値を含む新しい順序付けされたデータフレーム「ord.df」を作成できます。

>ord.df<-cbind(rownames(df)[order(rownames(df))], df[order(rownames(df)),])
new_df <- df[ order(row.names(df)), ]  

または同様のものが機能しません。このステートメントの後、new_dfには行名がありません。より良い解決策は、列を行名として追加し、それでソートし、行名として設定することだと思います

0
user9447252

私の場合のようにデータフレームに列が1つしかない場合は、drop = Fを追加する必要があります。

df[ order(rownames(df)) , ,drop=F]
0
forever