1

データセットのリストがあります。各データセットには、1か月分のデータが含まれています。データは何年にもわたって存在するため、毎年12個のデータセットがあります。このデータは元々Excelファイルの集まりでした。このアドバイスに従って、以前に.csvに変換されたすべてのファイルをインポートしました。

datalist <- list()
files <- list.files(pattern="\\.csv$")

for(file in files) {
    stem <- gsub("\\.csv$","",file)
    datalist[[stem]] <- read.csv(file)
}

datalistそのため、すべてのデータセットを含むという名前のリストが作成されます。

さて、私の問題は、ファイル名だけがデータの各部分が収集された実際の月と年を含んでいるということです。そこで、各データセット名から名前と年を取得し、そのデータフレームの2つの新しい列に代入したいと思います。 "と"月"。

私がデータフレーム名として保持したすべてのファイル名は、次の構造に従います:[]_[]_[ ...他のテキスト]、たとえば「August_2012_foo_bar」。そのため、正規表現を使用して、最初に月、次に年を取得することにしました。私のコードスタブは次のとおりです。

for(dataset in names(datalists)) {
    name <- dataset
    month <- strapply(name,"^([^_]*).*$")
    ...?
}

正規表現"^([^_]*).*$"は、アンダースコアの前にあるもの、つまり月を取得します。取得した月をデータセットの新しい列に割り当てる必要があるときに行き詰まります。私は運がなくても、assignとの両方を試しました。cbind

最後に、これらすべてのデータセットを1つに垂直にマージしたいと思います。

助けてくれてありがとう!

4

1 に答える 1

1

新しい列を参照して割り当てることができます。Rが列を作成します。

追加してみてください:

datalist[[stem]]$Month <- month
...

これにより、「Month」という名前の新しい列が作成され、monthそれに変数が割り当てられます。Rは、data.frameの既存の長さに一致するために必要な回数だけ、割り当てている変数を丁寧に繰り返すことに注意してください。

したがって、ループ全体は次のようになります。

for(file in files) {
    stem <- gsub("\\.csv$","",file)
    datalist[[stem]] <- read.csv(file)

    #parse out the month and year here
    ...

    #assign to new columns
    datalist[[stem]]$Month <- month
    datalist[[stem]]$Year <- year
}
于 2012-11-26T19:05:31.530 に答える