作者andrew43 (讨厌有好心推文後删文者)
看板R_Language
标题Re: [问题] 一次读入多个csv file
时间Fri Apr 18 09:55:38 2014
※ 引述《peiwinds (Macchiato Caramel)》之铭言:
: [问题类型]:
:
: 程式谘询(我想用R 做某件事情,但是我不知道要怎麽用R 写出来)
:
: [软体熟悉度]:
: 语法不太熟
: [问题叙述]:
: 最近因为要处理的资料很多,想一次读入多个csv档 (数十个到数百个都有)
: 并且将这些档案已 data frame的方式 rbind起来
: 下面第一个是我在 stackoverflow看人家分享拿来用的
: 第二个是我自己後来写的
: [程式范例]:
: 1.
: temp <- do.call(rbind, lapply(list.files(path=".", pattern="*.csv"),
: read.table, header=TRUE, sep=","))
: # 方法一的问题在於他的path我无法指定我要的目录 例如 D:/test 目录
: # 该目录中明明有csv档,但是却会出现错误讯息如下
: # Error in file(file, "rt") : cannot open the connection
list.files(path=".") 就是取得工作目录的档案名,
所以你需要切换工作目录,或是修正 path=""。
你看看 list.files(path="D:/test") 看看就明白了。
: # 当然如果我把资料都丢在环境目录下,当然是都读得到也不会有问题
: # 因此我便写了第2种
: 2.
: path <- "D:/test/"
: files <- list.files(path=path, pattern="*.csv")
: bindtemp <- data.frame()
: temp <- data.frame()
: for (file in files) {
: bindtemp <- read.csv(paste(path,file,sep=""))
: temp <- rbind(temp,bindtemp)
: }
: # 想问的是第一种的写法为什麽不能指定目录
: # 第二个只是丢上来跟大家分享,看有什麽什麽改进的空间XD
第二种其实没什麽问题,功能是一样的,只是看起来没有比较神而已啦。
: [关键字]:
: 读入多个外部档案
--
http://apansharing.blogspot.com/
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 122.117.37.172
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/R_Language/M.1397786141.A.213.html
1F:推 peiwinds:谢谢回复 可是我直接把第一个程式修改成 04/18 09:59
2F:→ peiwinds:list.files(path="D:/test") 就是会有error 04/18 10:00
3F:→ peiwinds:感觉应该是 do.call或lapply的问题? 04/18 10:01
4F:→ obarisk:得让list.files列出的档案列表有完整路径 04/18 11:00
5F:→ obarisk:因为list.files没有列出完整路径,read.csv吃到只有档名 04/18 11:01
6F:→ obarisk:但是档案不在当前目录,要吃完整路径 04/18 11:02
7F:→ obarisk:也许用setwd一直变换目录可以是一种作法 04/18 11:02
8F:推 peiwinds:了解!! 04/18 19:58
9F:→ celestialgod:or paste(path, "/", list.files(...)) 04/18 20:51
10F:→ celestialgod:path是你档案的位置 list.files(path = path, ...) 04/18 20:52
11F:→ celestialgod:paste(path, "/", list.files(path = path)) 04/18 20:52
12F:→ celestialgod:上面才对,最前面两行请忽略 04/18 20:52
13F:→ celestialgod:记得加sep = "" or use paste0 04/18 21:56
14F:→ psinqoo:getwd() <=看目前路径 04/29 16:43