2011-03-27 3 views
1

다음 데이터 프레임이 있고 상태 == 1 인 동일한 그룹에 해당하는 모든 행을 추출하려고합니다.데이터 프레임의 열에 조건이있는 모든 행을 추출 (또는 부분 집합)하는 방법은 무엇입니까?

상태 항목 (시퀀스 그룹 컬럼으로 넘버링) 0 또는 1

df<-data.frame(time= rep(1:4,times=c(2,3,5,4)),status=c(0,0,1,1,0,0,0,0,0,0,1,0,0,0)) 

    Input Data 

    time status 

1  1  0 
2  1  0 
3  2  1 
4  2  1 
5  2  0 
6  3  0 
7  3  0 
8  3  0 
9  3  0 
10 3  0 
11 4  1 
12 4  0 
13 4  0 
14 4  0 

원하는 출력하거나한다.

time status 

    1  1 
    1  1 
    1  0 
    2  1 
    2  0 
    2  0 
    2  0 

내 실제 data.frame의 치수는

5. 당신의 도움을 주셔서 감사합니다 10^6의 순서입니다.

답변

3

흠으로 행을 추출 할 수있는 방법을 방법 중 하나입니다 이 두 그룹 모두 상태 값 하나가 맞습니까? 그리고 그 두 그룹에서 당신은 전체 결과를 얻고 싶습니까?

그렇다면, 어떻게 이것에 대해 :

df <- data.frame(time = rep(1:4, times = c(2,3,5,4)), 
       status = c(0,0,1,1,0,0,0,0,0,0,1,0,0,0)) 

id <- unique(df[df$status == 1, "time"]) 
df2 <- df[df$time %in% id, ] 

편집 : 혼란에 대한

df2$time <- factor(df2$time, labels = c(1,2)) 
+0

@ mropa. 예, 이것은 시간 열이 (2,2,2)와 (4,4,4,4)에서 (1,1,1)과 (2,2,2,2) 순으로 번호가 매겨 지도록하려는 것입니다.). 감사합니다 – Tony

+0

@ 토니 오, 나는 번호를 매기는 그 부분을 놓쳤습니다. 방금 내 대답을 바꿨어. – mropa

1

두 가지 별도의 작업을 수행 할 때 혼란 스럽습니다. 먼저 상태 == 1 인 행을 추출하고 싶지만 원하는 출력에서는 0이있는 행이 있습니다. 이것은 당신이 그룹이 네 이후를 얻으려면 있도록, 상태 == 1.

df1 <- data.frame(time= rep(1:4,times=c(2,3,5,4)),status=c(0,0,1,1,0,0,0,0,0,0,1,0,0,0)) 
df1$time <- factor(df1$time) 
df1s <- split(df1, df1$time) 
df1l <- lapply(df1s, function(x) { 
      x[x$status == 1, ] 
     }) 
df1l <- do.call("rbind", df1l) 

또는 다른 방법으로 주위

df2 <- df1[df1$status == 1, ] 
df2.l <- split(df2, as.factor(df2$time)) 
+0

죄송합니다. 어떻게하면 df1l을 df로 변환하겠습니까? 감사합니다. – Tony

+0

'do.call ("rbind", df1l)'을 사용하여리스트를 data.frame으로 "팬케이크"할 수 있습니다. –

관련 문제