Re: [問題] 如何讀入多個CSV檔

作者: clansoda (小笨)   2016-01-15 12:10:30
感謝各位的幫助,我目前資料讀取沒甚麼問題了,是後面卡關了
我寫一個早上都沒辦法突破,我先把資料貼上來,因為用敘述的好像很難
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)
我有碰到一個問題是我想用read.csv只讀我想要的CSV檔案就好了
但是list[[id]]這樣的寫法會有問題,應該是裡面只能放一個數字
假設id是1:10這樣的話就會有問題,然後我就想是不是可以用for (i in seq_along(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.
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的直接放
我想要留下來的變數名稱就好了,第二個我就真的看不懂他在寫什麼了
想請問我中間的邏輯哪邊有錯,不好意思一直在同一個問題打轉。
作者: kpwada (征服的怒火)   2016-01-15 12:23:00
我也曾經撞牆期,不恥下問很勇敢,加油

Links booklink

Contact Us: admin [ a t ] ucptt.com