2014-07-15 55 views
0

說,我們有:刪除行,包括和一個字符串後

dat <- data.frame(x1 = c(rep(c("A","B"), each = 4),"B"), 
       x2 = rep(c("a","a","b","b", "a","a","a","a","a")), 
       x3 = c("cow","pig","cow","cow", 
         "cow","pig","pig","pig", 
         "cow" 
         ) 
       ) 

我想繼續爲每X1:X2組合中的所有行前的「豬」的發生,幷包括後和「豬」後刪除所有行發生。

如果只有「牛」,那麼我保留所有的「牛」,如果只有「豬」,然後刪除所有的行。

這個例子將給:

x1 x2 x3 
1 A a cow 
3 A b cow 
4 A b cow 
5 B a cow 

我可以寫例如罰款,這個ddply,但我知道必須有一個功能,迅速得到行「豬」,我無法找到之前和保存一個循環。

+0

我想你想解決你的例子:你在第2行有「豬」,但你允許在該行之後的母牛。請查閱。 –

+0

是的,但第2排中的豬是指A:a不是A:b(即x1:x2) – user1320502

回答

1

與子集更容易:

dat[!(dat$x3=='pig'),] 
x1 x2 x3 
1 A a cow 
3 A b cow 
4 A b cow 

編輯:第一「豬」後刪除所有行,這樣做:

badrow<-which(dat$x3=='pig')[1] 
dat[1:(badrow-1),] 

增加了一些代碼來處理情況which回報一無所有所有。

+0

感謝卡爾我認爲或許我的例子不夠充分,如果對於A:我有牛,豬,牛你的解決方案會保持第二個牛不?我編輯我的例子來說明這一點。 – user1320502

+0

更新版本如何? –

+0

我想我可以從這裏工作,這例如沒有照顧豬不存在的情況下,歡呼卡爾 – user1320502

相關問題