6

マッチング演算子を使用して、マトリックスに表示される値を別のデータ フレームから取得しています。ただし、結果のマトリックスには、元のマトリックスではなく、データ フレームに表示される順序で値が含まれます。マッチング演算子を使用して元の行列の順序を維持する方法はありますか?

簡単な例を次に示します。

vec=c("b","a","c"); vec

df=data.frame(row.names=letters[1:5],values=1:5); df

df[rownames(df) %in% vec,1]

これにより、データフレームに表示される> [1] 1 2 3順序が生成されます。ただし、元のベクトルに表示される順序"a" "b" "c"を生成したいと思います。>[1] 2 1 3

ありがとう!

4

3 に答える 3

8

を使用しmatchます。

df[match(vec, rownames(df)), ]
# [1] 2 1 3

vecまたは のいずれかrownames(df)に重複する値がある場合match、期待どおりに動作しない可能性があることに注意してください。

編集: 行名のインデックス作成が問題をもう少し簡単かつエレガントに解決することに気付きました:

df[vec, ]
# [1] 2 1 3
于 2012-05-14T16:01:21.943 に答える
3

一致を使用します(そして、一方のベクトルで一致しない要素の NA 値を削除します):

Filter(function(x) !is.na(x), match(rownames(df), vec))
于 2012-05-14T15:55:04.983 に答える