2016-06-21 127 views
0

對不起,如果標題混淆,不知道如何描述此問題。好吧,我有一個數據幀,其中一列是採樣點,其中有很多,另一列是採樣方法,其中只有兩列。下面是一個簡化版本:根據同一列中的不同值和另一列中的唯一值選擇數據R

site <- c("X", "Y", "X","Z") 
method <- c("A", "B", "B", "A") 
data <- data.frame(site, method) 
data 
    site method 
1 X  A 
2 Y  B 
3 X  B 
4 Z  A 

現在同時使用抽樣的方法A和B法一些網站得到了採樣,有的得到了由唯一方法A或B.

我想只選擇那些網站採樣採用這兩種方法進行採樣。例如,輸出這個數據應該是這樣的:

 site method 
    1 X  A 
    2 X  B 

我沒有樣本代碼,因爲我真的不知道如何做到這一點。請幫忙!

+2

類似 - http://stackoverflow.com/questions/21421031/eliminate-groups-which-have-different-values-in- r/21421184 - 以及相關的問題也非常相似。 – thelatemail

回答

2

我們可以使用data.table。將'data.frame'轉換爲'data.table'(setDT(data)),按'site'分組,if唯一'method'的長度大於1,然後獲取Data.table的子集。

library(data.table) 
setDT(data)[, if(uniqueN(method)>1) .SD , by = site] 

或者與dplyr,我們可以做到這一點。

library(dplyr) 
data %>% 
    group_by(site) %>% 
    filter(n_distinct(method)>1) 

一個可能base R的選擇將是

data[ with(data, ave(method, site, FUN = function(x) length(unique(x))>1)),] 
相關問題