2017-05-30 4 views
1

を返し、私は私が(試合を使用しています。この文字ベクトルR:マッチ()のみ最初に出現したに

names <- c('Beethovan','Beethovan','AdagioBarber','AdagioBarber')

に合わせてアレンジしたいデータフレーム

names2 <- c('AdagioBarber','AdagioBarber', 'Beethovan','Beethovan') 
Value <- c(33,55,21,54) 
song.data <- data.frame(names2,Value) 

を持っている)へこれを達成する

data.frame(song.data[match((names), (song.data$names2)),]) 

問題は、最初に発生したoccurenc指摘しているzx8754と@Evanフリードランド@としてES

 names2   Value 
3  Beethovan   21 
3.1 Beethovan   21 
1  AdagioBarber  33 
1.1 AdagioBarber  33 
+2

は、あなたが2つの「Beethovan」レコードをしたい順序はこれから知る方法はありません。あなたは本当に何をしようとしていますか?だからあなたは他の人が並べ替えることを望む独自の値のリストを持っていますか?どうやってネクタイを壊しますか? – MrFlick

+0

@MrFlickおそらく、単に 'names2'カラムのレベルを並べ替えてデータフレームをソートしたいと思っていますか?しかし、最初のマッチだけを返すよう明示されているので、 'match'に関するコメントについては混乱しています。 – joran

+2

たぶん 'song.data $ names2 < - factor(song.data $ names2、levels = c( 'Beethovan'、 'AdagioBarber')); song.data [order(song.data $ names2)、] '? – zx8754

答えて

1

あなたは、orderを使用することができます。

> name.order <- c('Beethovan','AdagioBarber')   
> song.data$names2 <- factor(song.data$names2, levels= name.order)            
> song.data[order(song.data$names2), ]                   
     names2 Value   
3 Beethovan 21   
4 Beethovan 54   
1 AdagioBarber 33   
2 AdagioBarber 55   

基本的には、factorは整数に文字列をオンにし、どのような文字列に対応してどのような整数のルックアップテーブルを作成します。 levels引数には、ルックアップテーブルの内容を指定します。その議論がなければ、それはちょうど出現順に進むだろう。例えばので

> as.numeric(factor(letters[1:5]))                    
[1] 1 2 3 4 5    
> as.numeric(factor(letters[1:5], levels=c("d","b","e","a","c")))            
[1] 4 2 5 1 3 

注:あなたはそうしないと、NA年代ので終わるよ、あなたはそのname.orderベクトル内のすべてのあなたの(正しいスペル)のレベルを取得し、絶対に確認する必要がありますorderの出力。

sortが要因をソートする機能を持っていない理由を私はわからないんだけど、それはそれが何であるかである。)

関連する問題