1

重複の可能性:
CSVをRにインポートする場合、CSVの名前で列を生成する方法は?

単一のデータフレームにロードしたいファイルのコレクションを取得しました。私が読んでいる各ファイルの構造は同じですが、行数が異なります。これらの各ファイルが1人の参加者を表しているとしましょう。私は、以下のコードを使用してそれらを読み取ることができることを知っています。

files <- c("john.csv","fred.csv","nick.csv","alex.csv")
library(plyr)
dfoc <- ldply(files, read.csv, header = T)

ここで、どの行がどの参加者に属しているかを識別できるようにしたいと思います。ビッグデータフレームに読み込む前に、これらのファイルごとに1つの列を追加したいと思います。追加する列には、特定の参加者の行数と同じ行数が含まれますnrow(john)。追加する列には、ファイル名などの識別子が繰り返し含まれている必要がありますnrow(x)

助言がありますか?

4

1 に答える 1

3

これが私がすることです。(重要なアイデアは、id列の値と読み込まれたばかりのdata.frameを呼び出し内に一緒に配置することdata.frame()です。Rのリサイクルルールによりid、それぞれの場合に列の長さが適切になります。)

## Set up a reproducible example
a <- tempfile()
b <- tempfile()
write.csv(head(mtcars, 2), file=a)
write.csv(tail(mtcars, 3), file=b)
fnames <- c(a,b)

## Here's the code you are looking for
do.call(rbind, lapply(fnames, function(X) {
    data.frame(id = basename(X), read.csv(X))})
)
#                 id             X  mpg cyl disp  hp drat    wt  qsec vs am gear carb
# 1 file104862dd45aa     Mazda RX4 21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
# 2 file104862dd45aa Mazda RX4 Wag 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
# 3  file1048d9e5764  Ferrari Dino 19.7   6  145 175 3.62 2.770 15.50  0  1    5    6
# 4  file1048d9e5764 Maserati Bora 15.0   8  301 335 3.54 3.570 14.60  0  1    5    8
# 5  file1048d9e5764    Volvo 142E 21.4   4  121 109 4.11 2.780 18.60  1  1    4    2
于 2012-11-21T21:40:28.170 に答える