Re: [问题] 如何读入多个CSV档

楼主: celestialgod (天)   2016-01-15 15:21:48
※ 引述《clansoda (小笨)》之铭言:
: 感谢各位的帮助,我目前资料读取没什么问题了,是后面卡关了
: 我写一个早上都没办法突破,我先把资料贴上来,因为用叙述的好像很难
: https://goo.gl/DpkiII,这是我目前用的资料
连结失效
: 要写出一个能够算出sulfate或nitrate的平均数的function
: 我目前是想说用土法炼钢的方式将资料读进来然后用dplyr的函数来筛选
: 我写成这样pollutanmean<-function (directory, pollutan, id=1:332 ) {
: csv_file<-vector("list",length(directory))
: for (i in seq_along(directory)) {
: csv_file[[i]]<-read.csv(directory[[i]])
: }
: s<-0
: do.call(rbind,csv_file)->completedata
: library(dplyr)
: final<-completedata %>% filter(ID==id) %>%
: select("pollutan")
: s+mean(final,na.rm=TRUE)->s
: return(s)
library(data.table)
library(plyr)
library(dplyr)
library(magrittr)
pollutanmean <- function(csvFilesLoc, pollutan, id = 1:332){
# other method for reading data
# sprintf('%s/%03i.csv', csvFilesLoc, id) %>% llply(fread) %>% bind_rows %>%
list.files(csvFilesLoc, full.names = TRUE, pattern = '\\.csv') %>%
{llply(.[id], fread)} %>% bind_rows %>%
summarise_(.dots = paste0("mean(", pollutan, ", na.rm = TRUE)")) %>%
unlist %>% set_names(NULL) %>% return
}
# sulfate, nitrate
pollutanmean('specdata', 'nitrate', 1:20) # 0.8286293
pollutanmean('specdata', 'sulfate', 70:80) # 2.712632
: 我有碰到一个问题是我想用read.csv只读我想要的CSV档案就好了
: 但是list[[id]]这样的写法会有问题,应该是里面只能放一个数字
: 假设id是1:10这样的话就会有问题,然后我就想是不是可以用for (i in seq_along(id))
seq_along是沿着id长度,所以下面要用id,要使用id[i]
不然就是直接 for (i in id)
: 这样的方式去读,可是假设使用者将id填入68:70,我发现seq_along会传回1、2、3
: 这样的数字,所以我只好把所有CSV档案都读进来然后用昨天学到的do.call将所有
: 档案合并然后用filter筛选ID为使用者填入的id,接着选择sulfate或nitrate
: 其中一个变量然后做平均接着传回来
: 我得到下面的error提示
: Error: All select() inputs must resolve to integer column positions.
select不能用字串,请用select_
: The following do not:
: * "pollutan"
: In addition: Warning message:
: In c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, :
: longer object length is not a multiple of shorter object length
: 第一个我觉得是说要叫我指定变量的位置,但是我学到的select的直接放
: 我想要留下来的变量名称就好了,第二个我就真的看不懂他在写什么了
: 想请问我中间的逻辑哪边有错,不好意思一直在同一个问题打转。
作者: clansoda (小笨)   2016-01-15 15:53:00
我把资料丢到googledrive上了 https://goo.gl/zJygna大大我回在这篇文我现在写到几乎完成了 剩下for (i in id)这个环节我发现如果我这样写read.csv(path[i]) 他只会读入最后一个数字代表的CSV欸,比如id为1:10 那就只会读入010号CSV,导致最后的结果是错的,想请问for id 这种写法是对的吗?

Links booklink

Contact Us: admin [ a t ] ucptt.com