2017-09-26 7 views
0

私はRの初心者です。私は毎週の情報を含む大きなCVSファイルを持っています。それを一度読んで小さなファイル(ウィンドウ)に保存したいのですが、それらを別々に扱う。大きなCSVファイルを週間と毎日のウィンドウに分割する

元のファイルは、週(整数)と日(月〜金の文字)などの属性を持つデータフレームです。

私はファイルをW1、W2、W3、..... Wnに保存したいと言っていました。(週数は情報に依存しています。 -11) また、毎日の情報D1、D2、D3、D4、D5を保存したい

私は次のコードを試しましたが、期待していたとおりに動作しませんでした。

myclasses = read.csv("C:/myfile.csv") 
i=1 
weekdays <- list('Monday','Tuesday','Wednesday','Thursday','Friday') 
for (i <= myclasses$Week_number) 
{ 
tmp1 <- paste("W", i, sep = "") 
assign(tmp1, myclasses %>% filter(Week_number == i)) 
j = 'Monday' 
for (j in weekdays) 
{ 
tmp2 <- paste("D", j, sep = "") 
assign(tmp2, myclasses %>% filter(Week_number == i,Day == j)) 
} 
i = (i +1) 
} 

私もループを試みましたが、多数のファイルが作成されました。 ちょうど私は1週間のウィンドウを作成するまで、2週間目のウィンドウを作成するまで、2週間目のウィンドウを作成するまで、日のウィンドウを処理したいと考えています。

お願いします。

+1

週番号に基づいてdata.frameを分割し、各リスト要素を独自のファイルに保存するだけですか?あなたのデータの一部を簡単に貼り付ける形で共有してください。これを行う方法については、[この質問](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)を参照してください。 –

+0

ご返信ありがとうございます。これはデータの頭部の一部Week_number Day hour Hour.Min W_間隔の間隔Sensor_Location 1 1月7日07:00:00 HSピークS3 2 1月7日07:00:00 HSピークS1 3 1月7日07 :00:00 HSピークS2 4 1月7日07:00:00 HSピークS1 – Manal

+0

何をしようとしているのは週番号に基づいて分割し、日に基づいて変数の名前を自動的に作成したい – Manal

答えて

1

私は上記のコメントに示された入力に基づいてここでスタブを取っています。これにより、ファイルを個別のcsvまたはdata.framesとして保存することができます。

# this assume the 1st column are row name/id. 
dt<-read.table(text=" 
Week_number Day hour Hour.Min W_interval interval Sensor_Location 
1 1 Monday 7 07:00:00 HS peak S3 
2 1 Monday 7 07:00:00 HS peak S1 
3 1 Monday 7 07:00:00 HS peak S2 
4 1 Monday 7 07:00:00 HS peak S1 
5 2 Monday 7 07:00:00 HS peak S1 
6 2 Tuesday 7 07:00:00 HS peak S1", header=T) 

dt$Day<- as.numeric(dt$Day) #might have to be careful with the order of the dates 
#ordered list would be more solid 

#splitting based on Week_number and Day column 
dt.split1<-split(dt, list(dt$Week_number,dt$Day)) 

library(stringr) #required for str_sub 

#this should save the file as in W"X"D"X".csv in your current directory. 
lapply(1:length(dt.split1), function(i) write.csv(dt.split1[[i]], 
              file = paste0("W",str_sub(names(dt.split1)[i],1,1), 
                  "D",str_sub(names(dt.split1)[i],-1), 
                  ".csv"), 
              row.names = FALSE)) 
#output:W1D1.csv 

#alternatively if you want them as data frame. 
list2env(dt.split1,envir=.GlobalEnv) 
+0

ありがとう@MingH – Manal

関連する問題