2012-04-23 3 views
0

대부분의 질문은 데이터를 추출하고 구성하는 방법이며, 사전 교육없이 내가 원하는 것을 분명히 표현할 수 없다는 것에 대해 사과드립니다. 나는 심지어 텍스트 책이나 온라인에서 그들을보기 위해 사물을 표현하는 법을 알기를 바란다. 여기 내 질문 :r에 루프를 사용하여 서브 세트 및 그룹화하는 방법은 무엇입니까?

ID라는 고유 한 그룹 ID가있는 데이터 프레임이 있는데 153 개의 고유 한 ID가 있지만 그 그룹의 정보가 6,000 개를 넘습니다.

내가하고 싶은 것은 한 번에 2 개 그룹의 모든 정보를 가져 와서 모든 관련 정보가있는 간단한 CSV 파일을 작성하는 것입니다. 전체 개인 수가 홀수 인 경우 어떻게 작동합니까 (n = 153).

나는 이런 식으로 뭔가 생각이 작동하지 않는

IDs = unique(dat$ID) 
for (i in length(IDs)){ 
    IDgp = subset(dat, dat$ID==IDs[i] & dat$ID==IDs[i+1]) 
    write.csv(IDgp, paste(IDgp[i],".csv") 
    i = i+2 
    } 

을, 그리고 그것이 다음 "이 그룹"을 증가하는 방법을 모르겠습니다. 나는 루프가 clunky하고 나는 어쩌면 ddply 일할 수도 또는 심지어 명령을 하위 집합 대신 생각했다. R에서 여러 가지 일을 할 수있는 방법이 많기 때문에 나는 무엇을하고 싶은지도 모릅니다. 나는 그것을 복잡하게 끝났다고 생각한다.

나는 대답을 찾고 있었고 가능성을 넘어서 왔지만 한 번에 두 개 이상의 그룹에 대한 정보를 쓰는 법을 모르며 함수 (x) 명령이 무엇인지 분명하지 않습니다. 진행 중입니다.

d_ply(dat, "ID", function(x) 
    write.csv(x[i], file = paste(x$ID[i], ".csv") 
    , row.names = FALSE)) 
+0

가능한 모든 그룹 ID 쌍의 데이터를 별도의 파일에 저장해야합니까? – DrDom

+0

아마 이런 식으로 접근하지는 않지만 대신 while 루프를 사용할 수 있습니다. –

+0

@DrDom 아니요, 가능한 모든 쌍이 아니며, 순차적으로 목록을 작성합니다. 그룹 1 및 2의 정보가있는 파일을 생성 한 다음 그룹 3 및 4의 파일을 생성 한 다음 5 및 6의 파일을 생성합니다. 'zoo' 패키지의'rollapply'는 – Kerry

답변

1

아마도 도움이 될 수 있습니다. 그러나 나는 이것을하는 더 우아한 방법이 있다고 생각합니다.

IDs = unique(dat$ID) 
for (i in seq(1, length(IDs), 2)){ 
    write.csv(dat[dat$ID %in% IDs[i+c(0,1)], ], 
    paste(IDs[i], "_", IDs[i+1], ".csv", sep="")) 
} 

편집이 ID를

+0

은 ID 붙여 넣기 (IDgp [i]'붙여 넣기 (ID [i]) 또는 붙여 넣기 (ID [i], IDs [i + 1]'? (ps 어떻게 든 내 편집 내용은 저장되지 않았습니다. 두 번째 시도) – BenBarnes

+0

예, 원본 코드를 붙여 넣기 만합니다. 수정 해 주셔서 감사합니다. – DrDom

+0

@DrDom이 스크립트를 실행하면 파일 이름이 비어 있습니다. 해당 헤더에 올바른 이름이 있지만 데이터의 중요도는 – Kerry

1

여기에 다음 ID가에서 해당 차원의 매트릭스를 구축, 하나의 접근 방법의 전체 길이에 대한 순서를 만들 수는 그들을 통해 루프 :

dat <- data.frame(id = 1:10, foo = runif(10)) 
#This will throw a warning if dimensions don't line up, not sure what you want to do with those 
idpairs <- matrix(sort(unique(dat$id)), ncol = 2, byrow = TRUE) 
> head(idpairs,2) 
    [,1] [,2] 
[1,] 1 2 
[2,] 3 4 
a_ply(idpairs, 1, function(x) print(dat[dat$id %in% x,])) 

당신에게 ' 위의 기능을 사용자의 목적에 맞는 것으로 바꾸십시오.