2 つの列を持つ何百もの csv ファイル (R の動物園オブジェクト) があります。
"Index","pp"
1951-01-01,22.9
1951-01-02,4.3
1951-01-03,4.6
2 列目に各ファイルの名前を表示します。たとえば、ファイル名が の場合02O_zoo.csv
、2 列目を「pp」ではなく「02O」にしたいと考えています。これを自動的に行う方法はありますか?
ありがとう
(1) From files read.zoo
は、最初の引数としてファイル名の文字ベクトルを取ることができるため、次のようになります。
# create test files
Lines <- '"Index","pp"
1951-01-01,22.9
1951-01-02,4.3
1951-01-03,4.6'
cat(Lines, file = "testzoo01.csv")
cat(Lines, file = "testzoo02.csv")
# read.zoo reads the files named in Filenames and merges them
library(zoo)
Filenames <- dir(pattern = "testzoo.*csv")
z <- read.zoo(Filenames, sep = ",", header = TRUE)
これにより、次のようになります。
> z
testzoo01.csv testzoo02.csv
1951-01-01 22.9 22.9
1951-01-02 4.3 4.3
1951-01-03 4.6 4.6
Filenames
必要に応じて、変数に名前を付けnames(Filenames) <- gsub("testzoo|.csv", "", Filenames)
たり、結果の名前を変更したりして、名前をさらに変更することができます。names(z) <- gsub("testzoo|.csv", "", names(z))
(2) 動物園のオブジェクトから。それらが以前に読み込まれたことがある場合は、これを試してください:
# create test objects using Lines and library() statement from above
testobj1 <- testobj2 <- read.zoo(textConnection(Lines), header = TRUE, sep = ",")
# merge them into a single zoo object
zz <- do.call(merge, sapply(ls(pattern = "testobj.*"), get, simplify = FALSE))
これにより、次のようになります。
> zz
testobj1 testobj2
1951-01-01 22.9 22.9
1951-01-02 4.3 4.3
1951-01-03 4.6 4.6
の名前はzz
、上記の説明のようにさらに変更できます。