根据同一列中的不同值和另一列中的唯一值选择数据R

问题描述:

对不起,如果标题混淆,不知道如何描述此问题。好吧,我有一个数据帧,其中一列是采样点,其中有很多,另一列是采样方法,其中只有两列。下面是一个简化版本:根据同一列中的不同值和另一列中的唯一值选择数据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://*.com/questions/21421031/eliminate-groups-which-have-different-values-in- r/21421184 - 以及相关的问题也非常相似。 – thelatemail

我们可以使用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)),]