2

この質問が以前に尋ねられたことは知っていますが、以前の投稿への回答は私の問題を解決できないようです.

タブ区切りの .txt ファイルが多数あります。各ファイルには 2 つの列 ("pos"、"score") があります。すべての「スコア」列を、複数の列を持つ 1 つのファイルにコンパイルしたいと考えています。各ファイルの行数はさまざまであり、コンパイルには関係ありません。

できればRでこれを達成する方法について誰かが私に指示できれば、それは非常に役に立ちます。

あるいは、私の最終的な目標は、各ファイルから「スコア」列の中央値と平均値を読み取ることです。したがって、ファイルをコンパイルするかどうかに関係なく、これを達成できれば、さらに便利になります。

ありがとう。

アップデート:

個人的なコード忍者のアイデアは魅力的ですが、これはファンタジーであり続けなければならないことを理解しています. 明示的でなくて申し訳ありません。

私はラップリーとリデュースを試しました。

> files <- dir(pattern="X.*\\.txt$")
> File_list <- lapply(filesToProcess,function(score)
+  read.table(score,header=TRUE,row.names=1))
> File_list <- lapply(files,function(z) z[c("pos","score")])
> out_file <- Reduce(function(x,y) {merge(x,y,by=c("pos"))},File_list)

行番号が可変であることを考えると、これはあまり意味がありません。プライヤーも試しました

> files <- list.files()
> out_list <- llply(files,read.table)

cbind と rbind だけでなく。通常、行番号が一致しないか、すべての「スコア」データが 1 つの列にコンパイルされているため、エラー メッセージが表示されます。

同様の投稿に関するアドバイス (たとえば、 Rで複数の csv ファイルをマージする、リスト内の複数の data.frames を同時にマージする、行数の異なるリスト内の複数のファイルをマージする) は役に立ちませんでした。

これで問題が解決することを願っています。

4

2 に答える 2

1

この問題は、次の 2 つの手順で解決できます。

ステップ 1. csv ファイルからデータ フレームのリストにデータを読み取ります。ここfilesで、 はファイル名のベクトルです。に追加の引数を追加する必要がある場合はread.csv、以下に示すように追加します。詳細?lapplyについては、を参照してください。

list_of_dataframes <- lapply(files, read.csv, stringsAsFactors = FALSE)

ステップ 2.各データ フレームの平均を計算します。

means <- sapply(list_of_dataframes, function(df) mean(df$score))

もちろん、次のようにいつでもワンステップで実行できます。

means <- sapply(files, function(filename) mean(read.csv(filename)$score))
于 2013-05-02T19:55:56.700 に答える
0

私はあなたがこのようなものを望んでいると思います:

all_data = do.call(rbind, lapply(files,
                                 function(f) {
                                   cbind(read.csv(f), file_name=f)
                                 }))

その後、好きなアクションの「別の」タイプを実行できます。read.csvまた、ニーズに合わせてさまざまなオプションを調整することを忘れないでください。

たとえば、上記を取得したら、次のことができます (さらに多くのことができます)。

library(data.table)
dt = data.table(all_data)

dt[, list(mean(score), median(score)), by = file_name]

ちょっとしたメモ:とその派生物の代わりにdata.tablefreadを使用してファイルを読み取ることもできます。read.tablerbindlistdo.call(rbind,

于 2013-05-02T19:39:54.473 に答える