2016-08-23 4 views
1

Name 열의 값을 기반으로 여러 개의 작은 데이터 프레임으로 분할하려는 큰 데이터 프레임이 있습니다.데이터 프레임을 여러 작은 데이터 프레임으로 분할 R

head(DATAFILE) 

# Age Site Name 1 2 3 4 5 

# 10  1  Orange 0 2 1 0 1 
# 10  1  Apple 2 5 4 0 2 
# 10  1  Banana 0 0 0 0 2 
# 20  2  Orange 0 2 1 0 0 
# 20  2  Apple 0 2 0 7 1 
# 20  2  Banana 0 4 1 3 6 

원하는 출력의 예제 파일.

head(Orange) 

# Age Site Name 1 2 3 4 5 

# 10  1  Orange 0 2 1 0 1 
# 20  2  Orange 0 2 1 0 0 

나는

SPLIT.DATA <- split(DATAFILE, DATAFILE$Name, drop = FALSE) 

을 시도하지만이 큰 목록을 반환하고, 내가 .CSV 파일로 저장할 수 있도록 내가 개별 파일을 싶습니다. 그래서 나는 원래의 파일을 나눌 좋은 방법이나 SPLIT.DATA 파일을 더 나누는 방법을 원합니다.

+2

그것은 개별적으로 저장 한 후 글로벌 envirnoment에 여러 개체를 갖는 한 x에 모든 CSV로 작성하는'SPLIT.DATA'를 통해'list' 및 루프에 보관하는 것이 좋습니다. (nm, ".csv"), row.names = FALSE, quote = FALSE로 표시됩니다.))' – akrun

+0

R 문항에서 이와 같은 데이터를 공유하기 위해'dput'을 사용하는 것이 좋습니다 (R 태그 설명 참조). 이는 당신을 도우려는 사람들이 쉽게 재현 할 수 있기 때문입니다. –

+0

나는 이미 코멘트를 업데이트했다. 그것을 확인하십시오. – akrun

답변

1

글로벌 환경에서 개별 개체를 만드는 대신 list 출력 (split)에서 직접 데이터 집합을 저장하는 것이 좋습니다. 'SPLIT.DATA'의 names으로 반복하고 list 요소의 이름과 동일한 이름의 개별 CSV 파일에 paste.csv으로 write.csv 호출의 요소를 작성합니다.

lapply(names(SPLIT.DATA), function(nm) 
    write.csv(SPLIT.DATA[[nm]], paste0(nm, ".csv"), row.names = FALSE, quote = FALSE)) 
+0

개개의 data.frames가 글로벌 환경을 오염시키는 것을 막기 위해서. 'list2env'는 매우 유용합니다. – hvollmeier

+0

@hvollmeier 예'list2env'를 사용할 수는 있지만 대부분의 작업은'lsit' 내에서 할 수 있습니다. – akrun

+0

@akrun 안녕하십니까,'lapply'를 사용할 때 나 나에게 사례. 우리가 사용하는 기능에 관계없이 거의 대부분의 경우에 사용하지만, 언제 갈 것인지를 스스로 이해할 수 있습니다. –

관련 문제