2014-04-28 3 views
1

데이터 프레임이 상당히 있습니다. 다음은 간단한 예이다 : 그것은 dput 같다 여기데이터 프레임을 해당 열 중 하나의 값으로 서브 세트하기

Group Element Value Note 
1  AAA  11 Good 
1  ABA  12 Good 
1  AVA  13 Good 
2  CBA  14 Good 
2  FDA  14 Good 
3  JHA  16 Good 
3  AHF  16 Good 
3  AKF  17 Good 

:

dat <- structure(list(Group = c(1L, 1L, 1L, 2L, 2L, 3L, 3L, 3L), Element = structure(c(1L, 
2L, 5L, 6L, 7L, 8L, 3L, 4L), .Label = c("AAA", "ABA", "AHF", 
"AKF", "AVA", "CBA", "FDA", "JHA"), class = "factor"), Value = c(11L, 
12L, 13L, 14L, 14L, 16L, 16L, 17L), Note = structure(c(1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L), .Label = "Good", class = "factor")), .Names = c("Group", 
"Element", "Value", "Note"), class = "data.frame", row.names = c(NA, 
-8L)) 

내가 그룹에 기반을 분리하기 위해 노력하고있어.

Group Element Value Note 
1  AAA  11 Good 
1  ABA  12 Good 
1  AVA  13 Good 

그룹 2 : 등등

2  CBA  14 Good 
2  FDA  14 Good 

등의이 데이터 프레임 될 것입니다 그룹 1

을 가정 해 봅시다.

답변

3

이 경우 split을 사용할 수 있습니다. 당신에 대한 질문 때문에 :

> x[[2]] ## or x[2] 
## Group Element Value Note 
## 4  2  CBA 14 Good 
## 5  2  FDA 14 Good 

ADD :

> dat 
## Group Element Value Note 
## 1  1  AAA 11 Good 
## 2  1  ABA 12 Good 
## 3  1  AVA 13 Good 
## 4  2  CBA 14 Good 
## 5  2  FDA 14 Good 
## 6  3  JHA 16 Good 
## 7  3  AHF 16 Good 
## 8  3  AKF 17 Good 

> x <- split(dat, dat$Group) 

그럼 당신은
예를 들어 , 여기에 그룹 2 등, x[[2]], x[[1]]와 그룹 번호에 의해 각각의 데이터 프레임에 액세스 할 수 있습니다 코멘트에서, 각각의 데이터 프레임을 write.csvlapply으로 파일에 쓸 수 있습니다. invisible 래퍼 list.files

> list.files(pattern = "^[0-9].csv") 
## [1] "1.csv" "2.csv" "3.csv" 

에서 우리는 파일을 찾고에 의해 생성 된 것을 볼 수 있습니다 lapply

> invisible(lapply(seq(x), function(i){ 
     write.csv(x[[i]], file = paste0(i, ".csv"), row.names = FALSE) 
    })) 

의 출력을 억제하는 것입니다 그리고 우리는 read.csv와 세 번째 그룹의 데이터 프레임을 볼 수 있습니다

> read.csv("3.csv") 
## Group Element Value Note 
## 1  3  JHA 16 Good 
## 2  3  AHF 16 Good 
## 3  3  AKF 17 Good 
+0

고맙습니다. 분할에서 새 데이터 프레임을 어떻게 만듭니 까? –

+0

그들은 이미 목록의 요소로 만들어졌습니다. 'split (D, D $ Group)'에 변수'x'를 대입합니다. 그런 다음 각 개별 데이터 프레임에'x [[1]], x [[2]] 등의 그룹 번호로 액세스 할 수 있습니다.이를 반영하여 내 대답을 업데이트했습니다. –

+0

이 두 데이터 프레임을 두 개의 서로 다른 파일에 쓸 수 있으며, 기본 이름은 1.csv, 2.csv입니까? –

1

의무적 인 plyr 버전 (리차드와 거의 비슷하지만,

library(plyr) 

groups <- dlply(dat, .(Group), function(x) { return(x) }) 

length(groups) 
## [1] 3 

groups$`1` # can also do groups[[1]] 
## Group Element Value Note 
## 1  1  AAA 11 Good 
## 2  1  ABA 12 Good 
## 3  1  AVA 13 Good 

groups[[2]] 
## Group Element Value Note 
## 1  2  CBA 14 Good 
## 2  2  FDA 14 Good 
관련 문제