2016-05-30 91 views
1

所以我有以下代碼:Dplyr〜選擇的東西,除了

library (dplyr) 
dataset1 <- filter(dataset0, dataset0$type == "black" | dataset0$type == "orange") 

這段代碼確實是dataset0的DataSet1的每一行中具有類型=「黑」或類型=「橙色」的補充。

如果我想採取其他所有措施,除了橙色和黑色,該怎麼辦。以下是否正確?

library (dplyr) 
dataset1 <- filter(dataset0, dataset0$type != "black" | dataset0$type != "orange") 

在此先感謝您。

回答

1

一種方法可以爲:

dataset1 <- filter(dataset0, !(dataset0$type == "black" | dataset0$type == "orange")) 

你的建議是不正確。當你否定一個複合表達式時,如果你不否定整個表達式,你需要將OR改爲AND。

這與dplyr沒有任何關係。這只是基本的邏輯。我還懷疑你的邏輯表達式中不應該包含帶有「$」操作符的數據框名稱。嘗試:

dataset1 <- filter(dataset0, !(type == "black" | type == "orange")) 
+0

試過以上,但他們似乎並沒有正常工作。也許這是因爲將「或」更改爲「和」,因爲它是在下面的評論中提到的〜我不確定。 :/ 我收到的結果很奇怪有一些細胞已被刪除,但我不明白哪一個。 – D1W1TR15

+0

我提供的邏輯在一個小例子中提供了正確的摘要。我不知道你爲什麼得到不尋常的結果。您需要發佈一個演示您所看到的示例。我建議使用dput()來構建示例,因爲這是提供可重現示例的最大機會。 –

+0

它工作!我不明白爲什麼,但我試過: dataset1 < - 過濾器(dataset0,!(type ==「black」)) dataset1 < - 過濾器(dataset1,!(type ==「orange」)) 我不知道爲什麼它不能爲我提供一行代碼所需的結果:/ – D1W1TR15

0

你必須改變「或」一「和」,像這樣

首先,做一些假數據

type <- c(rep("black", 5), rep("orange", 5), rep("green", 5)) 
dataset0 <- as.data.frame(type) 

現在使用子集在&您邏輯語句

如果不改變|&,你會得到的原始數據幀(有橙色和黑色兩種含稅),像這樣:

dataset1 <- filter(dataset0, dataset0$type != "black" | dataset0$type != "orange") 
dataset1 
    type 
1 black 
2 black 
3 black 
4 black 
5 black 
6 orange 
7 orange 
8 orange 
9 orange 
10 orange 
11 green 
12 green 
13 green 
14 green 
15 green 
+0

您好,感謝您的評論。 我不太明白你提到的類型的用法。我的意思是,我不知道我想刪除的「黑人」和「橙子」的確切數量(根據他們旁邊的數字和你提供的數據框來判斷,這是他們的總和,對?) 我明白你在最後兩行中做了什麼,但我不明白第一行的目的,如果可能,我會請求解釋。先謝謝你。 – D1W1TR15

+0

不好意思,但前兩行只是設置了一些僞造的數據,這樣你就可以看到使用|或過濾語句中的&。無論有多少條記錄,過濾器語句都可以工作,但由於您沒有提供數據,因此我做了一些測試,以測試兩種不同的過濾器語句。 –