2011-09-01 31 views
6

Tôi có hàng trăm file csv (đối tượng sở thú trong R) với 2 cột:Sử dụng tên tập tin đến tên một cột

"Index","pp"
1951-01-01,22.9
1951-01-02,4.3
1951-01-03,4.6

Tôi muốn cột thứ hai có tên của mỗi tập tin. Ví dụ: khi tên tệp là 02O_zoo.csv Tôi muốn cột thứ hai là "02O" thay vì "pp". Có cách tự động để làm điều này?

Cảm ơn

Trả lời

8

(1) Từ fileread.zoo có thể mất một vector đặc trưng của tên tập tin như là đối số đầu tiên của nó vậy:

# 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) 

mang đến cho này:

> 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 

Nó có thể sửa đổi tên thêm nếu muốn bằng cách đặt tên trên biến số Filenames, ví dụ names(Filenames) <- gsub("testzoo|.csv", "", Filenames) hoặc bằng cách sửa đổi tên của kết quả, ví dụ: names(z) <- gsub("testzoo|.csv", "", names(z))

(2) Từ zoo Objects. Nếu họ đã được đọc trong trước sau đó thử này:

# 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)) 

mang đến cho này:

> zz 
      testobj1 testobj2 
1951-01-01  22.9  22.9 
1951-01-02  4.3  4.3 
1951-01-03  4.6  4.6 

Tên của zz có thể được sửa đổi thêm như trong các cuộc thảo luận ở trên.

+0

cảm ơn, đây là cách rất gọn gàng để thực hiện! – sbg

Các vấn đề liên quan