使用文件名作为列名

7
我有数百个csv文件(R中的动物园对象),每个文件有2列:
“Index”,“pp” 1951-01-01,22.9 1951-01-02,4.3 1951-01-03,4.6
我希望第二列具有每个文件的名称。例如,当文件名为“02O_zoo.csv”时,我希望第二列为“02O”,而不是“pp”。是否有自动完成此操作的方法?
谢谢
1个回答

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))。从zoo对象中获取数据,如果它们已经被先前读取,则可以尝试以下操作:
# 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
< p >如上讨论,< code >zz< /code >的名称可以进一步修改。< /p >

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接