2016-08-16 7 views
0

で複数のファイルの上に、私はこのようになりCSVファイルの数が多い、コンバイン:が注文、DEDUPはR

var val1 val2 
a 2 1 
b 2 2 
c 3 3 
d 9 2 
e 1 1 

私はしたいと思います:

  1. でそれらを読みます各CSVからトップ3を取る
  2. 変数名のみのリストを作成する(3 xファイル数)
  3. リストに一意の名前のみを残す

私はこれを行うことによって、ポイント3を取得するために管理していると思う:

csvList <- list.files(path = "mypath", pattern = "*.csv", full.names = T) 

bla <- lapply(lapply(csvList, read.csv), function(x) x[order(x$val1, decreasing=T)[1:3], ]) 

lapply(bla,"[", , 1, drop=FALSE) 

、私は各CSVでトップ3変数のリストを持っています。しかし、このリストを文字列に変換して一意の値だけを保持する方法はわかりません。

助けを歓迎します。

ありがとうございました!

+0

例の中から 'a b c'を選びたいだけですか?私はあなたの 'lapply'結果を' unlist'して、 'unique'を使うことができると思います。これはdedup/uniqifiesです。 – Frank

+0

それは正しいです、@フランク。私はリストとして 'a b c'だけを残したいと思います。'names'属性[450]は、ベクトル[9]と同じ長さでなければなりません。 ' – DGenchev

答えて

1

blaの最初の列を抽出するのは、drop=FALSEです。これは結果を列のリスト(各行にnameがある)として保存します。その結果はベクトルである最小の次元に強制するのではなくなります。 @Frankが示唆するように代わり、その後unlistunique続いdrop=TRUEを使用します。

unique(unlist(lapply(bla,"[", , 1, drop=TRUE))) 
ご存知のように

drop=TRUEはデフォルトで、あなたもそれを含める必要はありませんので。コメントの新しい要件に


更新

## unlist each column in turn and form a data frame 
res <- data.frame(lapply(c(1,2), function(x) unlist(lapply(bla,"[", , x)))) 
colnames(res) <- c("var","var1") ## restore the two column names 
## remove duplicates 
res <- res[!duplicated(res[,1]),] 

注意これが唯一それぞれ一意のための最初の行を保つこと:次の操作を行い、(のみ一意var Sを保持する)最初の2列varvar1を維持し、varで重複を削除する

var。ここで重複を削除する定義です。

これが役に立ちます。

+0

非常に高く評価されています(' res、levels = lv、names = nm、class = "factor" 、@aichao。正直言って、私はRの新機能であり、デフォルトのオプションについては全く知らない。 – DGenchev

+0

フォローアップとして、varとval1(最初の2つの列)を保持することは可能ですが、最初の列のみにユニークに適用されますか? – DGenchev

+0

@DGenchev:私の更新を見てください。私はそれがあなたが探しているものであることを願っています。 – aichao