3

これは非常にばかげた質問かもしれませんが、私はこれに何時間も費やしてきました

フルパス (*/*data.csv) がない .csv ファイルを読みたい。以下は現在のディレクトリのパスを取得することを知っていますが、適応する方法がわかりません

Marks <- read.csv(dir(path = '.', full.names=T, pattern='^data.*\\.csv'))

これも試しましたが、うまくいきませんでした

Marks <- read.csv(file = "*/*/data.csv", sep = ",", header=FALSE))

これは異なるパスを持つ異なるマシンで使用されるため、特定のパスを特定することはできませんが、bash スクリプトの結果であるため、メイン ディレクトリのサブフォルダーについては確信があります。

ワークスペースを定義するUNIX内からこれを呼び出す予定です

私のデータ構造は

lecture01/test/data.csv
lecture02/test/data.csv
lecture03/test/data.csv
4

2 に答える 2

2

あなたのコメントは、現在あなたの質問自体ではありませんが、いくつかのサブディレクトリ (lecture01、lecture02 など) を含む作業ディレクトリでコードを実行することを期待していることを示しています。 data.csv ファイル。そうであり、目的が各サブディレクトリ内から csv を読み取ることである場合、残りの詳細に応じていくつかのオプションがあります。

ケース 1 : 最上位のディレクトリ名をすべて知っていて、それらが特異な可能性がある場合は、それらを直接指定します。

dirs <- c("lecture01", "lecture02", "some_other_dir")
paths <- file.path(dirs, "marks/data.csv")

ケース 2 : トップレベルのディレクトリ名を作成します。たとえば、それらがすべて「講義」で始まり、その後に 2 桁の数字が続き、01 から 15 などの数値範囲を指定できる (または具体的に指定したい) 場合:

dirs <- sprintf("lecture%02s", 1:15)
paths <- file.path(dirs, "marks/data.csv")

ケース 3 : パターンを照合して最上位のディレクトリ名を決定します。たとえば、文字列 "lecture" で始まるすべてのディレクトリ内からデータを読み取りたい場合:

matched.names <- list.files(".", pattern="^lecture")
dirs <- matched.names[file.info(matched.names)$isdir]
paths <- file.path(dirs, "marks/data.csv")

パスのベクトルを取得したら、おそらくlapplyデータをリストに読み取ってさらに処理し、それぞれにベースディレクトリ名を付けます。

csv.data <- lapply(paths, read.csv)
names(csv.data) <- dirs

または、個々の CSV に対して行う処理が、データの変更や新しいバージョンの書き出しなどの副作用のためだけに行われる場合、特にそれらすべてを同時にメモリに格納したくない場合ループを使用します。

この回答が的を射ていない場合、そうでない場合でも、それに応じて質問を明確にしていただければ幸いです。

于 2013-02-27T03:25:52.447 に答える
0

コードはありませんが、ルートから隔離されたグロブを実行し、preg_match を実行して .csv ファイルを見つけます (グロブブレースを使用)。

于 2013-02-27T00:22:45.453 に答える