1

私はこのようなデータフレームを持っています:

  A     B      C    
1   1   1 0.4519
2 101   1 0.3819
3 201   1 0.3819
4 301   1 0.2819
5 401   1 0.9819
6 501   1 0.6819

大きいですが、これは一例です。

orderからの数値を含むという名前の新しい列を作成したいのです(1 until nrow(df))が、列の値に基づいて増加しCます(最小値の場合は1、値の増加に伴い増加しCます)。列 C の値が等しい場合は順序基準を columnAに変更し、列 A の値が等しい場合は column に変更しますB

これはRで簡単かつ効率的な方法で行うことができますか?

これは、データ フレームで for ループを使用して if ステートメントを作成することで実行できますが、完了するまでに時間がかかります。そのため、可能であればより高速な代替手段が必要です

ありがとうございました

4

1 に答える 1

3

を使用orderして、複数の列に基づいてデータを並べ替えることができます。ドキュメントによるとorder

最初のベクトルの同点の場合、2番目のベクトルの値は同点を解除するために使用されます。値がまだ同点の場合は、後の引数の値を使用して同点を解除します。

これがサンプルデータフレームになります。

df <- data.frame(list(A=c(1, 101, 201, 301, 401, 501),
                      B=rep(1, 6),
                      C=c(0.45, 0.38, 0.38, 0.28, 0.98, 0.68)))

そして、これは、必要な順序に基づいてデータフレームに新しい列を作成するコードです。

df$order <- order(df$C, df$A, df$B)
于 2012-05-26T11:56:56.560 に答える