2016-12-20 2 views
5

dplyr의 group_by 함수로 그룹화 된 데이터 프레임의 각 그룹에 대해 별도의 .csv 파일을 만들려고합니다. 지금까지 나는 비슷한 것을 가지고있다.별도의 파일에 dplyr 그룹을 작성하려면 어떻게해야합니까?

by_cyl <- group_by(mtcars, cyl) 
do(by_cyl, write_csv(., "test.csv")) 

예상대로 마지막 그룹의 데이터 만있는 단일 .csv 파일을 작성한다. Cylinder를 포함하는 파일 이름을 가진 여러 .csv 파일을 작성하려면 어떻게 수정해야합니까?

답변

10

다음과 같이 csv 쓰기 프로세스를 사용자 지정 함수로 래핑 할 수 있습니다. 함수가 다른 data.frame는이라는 3 개 CSV 파일 "mtcars_cyl_4.csv", "mtcars_cyl_6.csv"와 "mtcars_cyl_8.csv"

customFun = function(DF) { 
write.csv(DF,paste0("mtcars_cyl_",unique(DF$cyl),".csv")) 
return(DF) 
} 

mtcars %>% 
group_by(cyl) %>% 
do(customFun(.)) 
+0

를 (사용자 정의 함수를 건너 뛸 수 있습니다)! 옆으로 - 내 실제 사례에서 나는 두 변수로 그룹화했다; 그룹으로 묶는 순서가 정말 중요합니다. 예를 들어, "cyl"는 이것이 작동하기위한 첫 번째 그룹이어야합니다. – Nat

+0

아름다운 함수 래퍼! 고맙습니다! – spacedSparking

2
를 반환합니다 Error: Results are not data frames at positions

오류를 반환를 반환해야합니다

data.table을 사용하고자한다면 다소 덜컹 거리는 방법이 있습니다. 결과 테이블이 CYL에 대한 열 필요가 없습니다 (이 파일 이름에 저장되어 있기 때문에 중복 될 것이다,하지만 어쩌면 당신이 다른 이유로 그것을에서 떠나고 싶어) 것을

require(data.table) 
# Because this is a built in table we have to make a copy first 
mtcars <- mtcars 
setDT(mtcars) # convert the data into a data.table 

mtcars[, write.csv(.SD, paste0("mtcars_cyl_", .BY, ".csv")), by = cyl] 

참고.

당신이 CYL 당신이

mtcars[, write.csv(c(.BY,.SD), paste0("mtcars_cyl_", .BY, ".csv")), by=cyl] 
+0

내장 된 테이블 중 하나를 먼저 복사하지 않고 data.table로 변환하면 오류가 발생합니다. "setDT (mtcars) 오류 : 바인딩이 잠겨 있기 때문에 참조로 'mtcars'를 data.table로 변환 할 수 없습니다. 'mtcars'는 패키지 (또는 환경) 내에있을 가능성이 매우 높습니다 변수 바인딩을 수정하지 못하도록 잠갔습니다. 개체를 현재 환경 (예 : var <- copy (var))으로 복사 한 다음 setDT를 다시 사용하십시오. " –

+0

죄송합니다. 내 나쁜 –

+0

리치 제안에 감사드립니다. –

1

다음 작품을 사용할 수있는 열 등의 출력에 포함하려면 내가 필요 정확히 무엇을

library(dplyr) 
library(readr) 
group_by(mtcars, cyl) %>% 
    do(write_csv(., paste0(unique(.$cyl), "test.csv"))) 
+0

@OdeToMyFiddle의 응답이 작동하는 동안이 "오류 : 위치가 1, 2, 3, 4, 5, 6, 7 위치의 데이터 프레임이 아닙니다"가 표시됩니다. – val

관련 문제