2016-05-31 4 views
1

for 루프에 CSV 파일을 쓰고 싶습니다. 데이터 프레임이 data이고 변수가 x 인 간단한 3 개의 행이 있다고 가정 해 보겠습니다. 결국, 나는 내 출력물을 200 개의 .csv 파일로 만들고 싶다. 각 파일에는 한 줄의 데이터가 들어있다. 데이터의 첫 번째 열은 내 변수의 ID ("ID")입니다.for 루프에 .csv를 씁니다.

또한, 내 데이터는 다음과 같이 설명되어 있습니다 :

data: 

    ID x 
[1] a 1 
[2] b 2 
[3] c 3 

for (i in nrow(data)){ 
    write.csv(data[i,2], file = paste0("Directory/", "data[i,1], ".csv")) 
} 

는이 코드 및 CSV 파일이 생성을 실행합니다. 그러나 마지막 행만 만들어 지므로 하나의 파일 c.csv 만 있으면됩니다.

내가 뭘 잘못하고 있는지 알아? 모든 아카이브를 자동으로 만들 것이라고 생각했습니다. 결과를 목록에 먼저 저장 한 다음 내보내기해야합니까?

+1

어쩌면 내가 잘못 계산하고 있지만 인용 부호가있는 것으로 보입니다. 코드 1 : 1을 복사하여 붙여 넣었습니까? – patrick

+1

'nrow (data)'는 하나의 숫자이며, 반복 할 일련의 숫자가 아닙니다. '1 : nrow (data)'또는'seq (nrow (data)) '가 필요합니다. 아니면 그냥'lapply'를 사용하십시오. 또한, 데이터 [i, 1]'에 대한 추가 인용문이 있습니다. – alistaire

+1

@Rafael의 대답은 대단합니다. 그러나 코드가 작동하지 않는 이유를 설명하기에는 너무 복잡 할 수도 있습니다. 아래의 코드를 사용하여 자신의 것과 비교하십시오. 아포스트로피를 사용하는 곳에 유의하십시오. for (i in 1 : nrow (data)) { write.csv (data [i, 2], file = paste0 ("Directory/", data [i, 1],".csv ")) } 또한 R의 일반적인 팁은 데이터"데이터 "를 호출하지 말고 필요하면"dat "또는"data1 "이라고 부릅니다. – paleo13

답변

0

루프를 사용할 필요가 없습니다. 더 효율적이고 신속한 data.table 접근 방식을 사용할 수 있습니다.

library(data.table) 

# create a column with row positions 
setDT(dt)[, rowpos := .I] 

# save each line of your dataset into a separate .csv file 
dt[, write.csv(.SD, paste0("output_", rowpos,".csv")), 
        by = rowpos, .SDcols=names(dt) ] 

만드는 일

# in case you still want to use a loop, this will do the work for you: 

for (i in 1:nrow(dt)){ 
         write.csv(dt[i,], file = paste0("loop_", i, ".csv")) 
         } 

추가 루프 사용

# Now in case you're working with a large dataset and you want 
# to make things much faster, you can use `fwrite {data.table}`* 

dt[, fwrite(.SD, paste0("output_", rowpos ,".csv")), 
       by = rowpos, .SDcols=names(dt) ] 

훨씬 더 빨리 : 단체 대신 행

에 의해 dataframe 저장 하위 집합을
# This line of code will save a separate `.csv` file for every ID 
# and name the file according to the ID 


setDT(dt)[, fwrite(.SD, paste0("output_", ID,".csv")), 
         by = ID, .SDcols=names(dt) ] 

* ps. fwrite은 아직 개발 버전이 data.table 1.9.7입니다. 설치 지침은 here으로 이동하십시오.

+0

안녕하세요 라파엘, 회신 해 주셔서 감사합니다,하지만 여전히 방법을 알아낼 수 없습니다. 다음 오류 수신 : "[.data.frame' 오류 (vazao_total,, write.csv (copy (.SD) [,': = mun, : 미사용 인수 (by = mun) "여기 내 ID 또는 V1은 mun 일 것이다. 뭔가 보이지 않는데 ... 계속 노력할 것이고 왜 이런 일이 일어나는지 알면 알려주지. 또한 fwrite (github를 통해 {data.table}을 설치 한 후)를 시도했지만 작동하지 않습니다. – rebeca

+0

안녕하세요 @rebeca, 내가 코드에 사소한 수정을했고 지금은 작동해야합니다. 'library (data.table)'와'setDT (yourdata)'를 잊지 마라. –