2011-03-27 23 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的尺寸爲10^6以便通過5

謝謝您的幫助。

回答

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 2011-03-27 08:45:46

+0

@Tony哦,我錯過了重編號的部分。我剛剛改變了我的答案 – mropa 2011-03-27 09:18:38

1

我有點困惑,因爲你試圖做兩件獨立的事情 - 首先想要提取狀態== 1的行,而在你想要的輸出中,有零行的行。 這是一種方法,你如何與狀態== 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 2011-03-27 08:49:00

+0

您可以使用'do.call(「rbind」,df1l)''將列表「pan-cake」到data.frame中。 – 2011-03-27 09:17:55

相關問題