2011-09-01 11 views
6

मैं csv फ़ाइलें के सैकड़ों 2 कॉलम के साथ (आर में चिड़ियाघर वस्तुओं) है:एक स्तंभ नाम के लिए फ़ाइल नाम का उपयोग करते हुए

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

मैं दूसरे स्तंभ प्रत्येक फ़ाइल का नाम करना चाहते हैं। उदाहरण के लिए, जब एक फ़ाइल नाम 02O_zoo.csv है, तो मैं दूसरा स्तंभ "पीपी" के बजाय "02O" होना चाहता हूं। क्या ऐसा करने का कोई स्वचालित तरीका है?

धन्यवाद

उत्तर

8

(1) फ़ाइलों से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 के नाम उपरोक्त चर्चा में के रूप में आगे से संशोधित किया जा सकता है।

+0

धन्यवाद, यह करने का यह बहुत साफ तरीका है! – sbg

संबंधित मुद्दे