2012-02-10 4 views
5

큰 설문지를 작성 중입니다. 서로 다른 질문 (예 : df1 및 df2)에 대한 요약 빈도 테이블을 생성합니다. 에 R의 방법이 있는지 내 설문 따라서 많은 질문과 dataframes을 가지고로.csv 파일로 내보내기 전에 두 데이터 프레임에 합류하십시오.

write.csv(df1 ,file="df2.csv") 

그러나, 내가 궁금 해서요 :

a<-c(1:5) 
b<-c(4,3,2,1,1) 
Percent<-c(40,30,20,10,10) 
df1<-data.frame(a,b,Percent) 
c<-c(1,1,5,2,1) 
Percent<-c(10,10,50,20,10) 
df2<-data.frame(a,c,Percent) 
rm(a,b,c,Percent) 

나는 일반적으로 다음과 같은 명령을 사용하여 CSV 파일로 dataframes를 내보낼 서로 다른 데이터 프레임을 결합하고 (이를 구분하는 라인으로 말하며)이를 CSV로 내보내고 (궁극적으로 Excel에서 열 수 있습니다)? Excel을 열면 모든 질문 데이터 프레임이 하나씩있는 파일 하나가 생깁니다. 이 하나의 CSV 파일은 결과를보기 위해 차례로 열어야하는 개별 파일을 갖는 것보다 훨씬 쉽습니다.

미리 감사드립니다. 제임스는 주석으로

+0

나는 그것들을 merge하는 것을 볼 것이다 – James

+0

파일 연결을 열면 두 함수에서 사용할 수있는 append 매개 변수를 사용하여 write.csv와 cat을 사용하여 파일에 쓸 수있다. –

답변

4

최종 목표가 Excel 스프레드 시트 인 경우 xls 파일을 직접 작성하기 위해 R에서 사용할 수있는 몇 가지 도구를 살펴볼 것입니다. 개인적으로는 XLConnect 패키지를 사용하지만 xlsx 및 여러 개의 write.xls 함수가 다양한 패키지에 떠 다니고 있습니다.

require(XLConnect) 

#Put your data frames in a single list 
# I added two more copies for illustration 
dfs <- list(df1,df2,df1,df2) 

#Create the xls file and a sheet 
# Note that XLConnect doesn't seem to do tilde expansion! 
wb <- loadWorkbook("/Users/jorane/Desktop/so.xls",create = TRUE) 
createSheet(wb,"Survey") 

#Starting row for each data frame 
# Note the +1 to get a gap between each 
n <- length(dfs) 
rows <- cumsum(c(1,sapply(dfs[1:(n-1)],nrow) + 1)) 

#Write the file 
writeWorksheet(wb,dfs,"Survey",startRow = rows,startCol = 1,header = FALSE) 
#If you don't call saveWorkbook, nothing will happen 
saveWorkbook(wb) 

내가 그렇지 않으면 각 데이터 프레임에 대한 열 머리글을 쓰기 때문에 header = FALSE 지정 : 그냥이 같은 상황에서 몇 가지 편리한 벡터화에 대한 수 있기 때문에

나는 에게 XLConnect 좋아하는 일. 그러나 끝에 xls 파일의 맨 위에 단일 행을 추가하는 것은별로 추가 작업이 아닙니다.

+0

그건 놀라운 일이야 - 조란 - 얼마나 좋은 패키지! 몇 가지 빠른 추가 질문 ... 첫째, 테이블 바로 위에있는 데이터 프레임의 이름을 가질 수 있습니다 (이는 개인 데이터 프레임과 인터뷰 질문을 쉽게 일치시킬 수 있습니다). 내 데이터 프레임의 이름은 나이, 성별 등의 각 질문을 참조하므로 매우 유용합니다. 또한 시각적 인 목적으로 데이터 프레임 주위에 테두리를 넣을 수 있습니까? –

+0

@KatieT 가능하다면 테두리를 추가하십시오. '? createCellStyle','? setBorder'를 보라. 그러나 각 경계 셀에 올바른 테두리를 개별적으로 지정해야하기 때문에 프로그램 방식으로 처리하는 것이 대단히 편리하지는 않습니다. df 이름을 추가하는 가장 쉬운 방법은'c ('Age', NA, NA, ...)'와 같은 별도의 열을 사용하는 것입니다. – joran

+0

엑셀로 내보낼 때 data.frames를 분리하는 방식을 설명해 주시겠습니까? 이 예제에서는 잘 작동하지만보다 다양한 data.frames로 동일한 코드를 시도하면 data.frames가 겹칠 수 있습니다. 나는 행 - cumsum (c (1, sapply (dfs, nrow) [- 1] + 1)) 내에서 숫자를 변경하려고 시도했지만 data.frames 사이의 일관된 공간을 보장하는 신뢰할 수있는 방법을 찾지 못했습니다. –

1

, 당신은

merge(df1, df2, by="a") 

를 사용할 수 있지만 수평으로 데이터를 결합한다. 당신이 그들을 결합 할 경우 수직으로 당신은 rbind을 사용할 수

rbind(df1, df2, df3,...) 

(참고 : 열 이름이 작동하는 rbind에 대한 일치 할 필요).

관련 문제