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

时间:2016-06-21 05:26:47

标签: r select subset

很抱歉,如果标题令人困惑,我们不确定如何描述此问题。好吧,我有一个数据框,其中一列是采样点,我有很多,一列是采样方法,其中只有两列。这是一个简化版本:

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

我没有示例代码,因为我真的不知道如何执行此操作。请帮忙!

1 个答案:

答案 0 :(得分:2)

我们可以使用data.table。将'data.frame'转换为'data.table'(setDT(data)),按'site'分组,if唯一'方法'的长度大于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)),]