根据两个约束对data.frame进行子集

时间:2015-01-22 09:12:21

标签: r subset

假设我想使用2个约束进行子集化。 1,第一列中的值是相同的 2,同时,第二列中的值是相同的

例如,我有一个数据框

a <- rep(1:5)
b <- c(1,2,2,2,1,1,1,2,2,2)
data <- data.frame(a,b)

a是对标识号,b代表性别

现在我们想要子集来创建一个数据集,其中我们有匹配的对ID和性别。

是使用while命令创建循环还是使用duplicated

预期结果应返回以绿色

突出显示的数据子集

enter image description here

1 个答案:

答案 0 :(得分:2)

你可以尝试

data[with(data, !!ave(b, a, FUN=function(x) 
                      length(unique(x))==1)),]

或者

library(dplyr)
data %>%
      group_by(a) %>%
      filter(n_distinct(b)==1)

或者

library(data.table)
setDT(data)[,.(b=b[length(unique(b))==1]) , a]

@David Arenburg提供的另一个data.table解决方案

setDT(data)[, if (length(unique(b)) == 1) .SD, a]