2017-09-26 12 views
0

저는 R의 초보자입니다. 주간 및 일일 정보가 포함 된 큰 CVS 파일이 있습니다. 한 번 읽으므로 작은 파일 (windows)에 파일을 저장하고 싶습니다. 그들을 개별적으로 다뤄야한다.큰 CSV 파일을 주간 및 일별 Windows로 분할

원본 파일은 주 (정수)와 일 (월 ~ 금) 및 기타 특성을 가진 데이터 프레임입니다.

나는 파일을 W1, W2, W3, ..... Wn에 저장하고 싶다고 말했기 때문에 (주 수는 정보에 따라 다르며 지금은 사전에 없지만 10 -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

주 번호에 따라 data.frame을 분할하고 각 목록 요소를 자체 파일에 저장 하시겠습니까? 손쉽게 붙여 넣기 할 수있는 형태로 데이터의 일부를 공유하십시오. 이 작업을 수행하는 방법에 대한 팁은 [이 질문] (https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)을 참조하십시오. 회신 해 주셔서 감사합니다. –

+0

데이터 머리 부분의 일부 Week_number 일 시간 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