2017-05-29 87 views
1

我有一個數據框在R與第一個因素有3個級別[A,B,C] 和第二個因素有3個級別[1,2,3]。這導致數據框架。R - 如何提取一個數據框的子集,其中包含許多基於條件的多個級別的兩個因子的觀察結果?

Alphabet <- c ("A","A","A","B","B","B","C","C") 
L <- c (1,2,1,1,3,1,3,3) 
df = data.frame(Alphabet, L) 

我想基於標準的框架子集,如果字母表中的級別有3,那麼該行應該被刪除。但是,只有在同一級別的另一個觀察結果中有1個或2個觀察點時纔會發生這種情況。

所以上面的示例行中,5將被丟棄,因爲B與1行4和6行7和8不會被丟棄相關聯也因爲C不與1或2。

相關聯
+0

如果我理解正確的話,在你上面的例子,該子集將僅由行7和8,作爲y是第一個因素水平與第二個因素只有一個水平相關聯的唯一行嗎? – Constantinos

+0

**來自評論隊列:**歡迎使用StackOverflow - 請閱讀[如何製作一個很好的R可重現示例?](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r -reproducible-example/5963610#5963610),然後編輯你的問題。 –

+0

它們將包括除5之外的所有行。該想法是保留與1,2相關的所有值。刪除包含3的行當且僅當與字母表中的級別關聯1或2。 – ZMP

回答

1

這裏是一個dplyr解決方案:

library(dplyr) 
group_by(df, Alphabet) %>% filter(!(L == 3 & any(L %in% c(1, 2)))) 
0

或者我們可以使用data.table

library(data.table) 
setDT(df)[df[, .I[!(L==3 & any(L %in% 1:2))], Alphabet]$V1] 
相關問題