根据模式删除行

时间:2016-04-26 05:22:39

标签: r data-manipulation

数据:

 df <- data.frame("y"= c(rep(100,10), rep(103,10)), "x" = c(rep(1,8),2,2,rep(4,5),7,7, rep(4,3)) )

对于y的每个值,我们期望x的唯一值。但在数据中,我们有几个不需要的值。基于模式,我们可以为y的每个值找到x的相应值。

我们能否找出存在不需要配对的行号?

预期产量: 9,10,16,17

1 个答案:

答案 0 :(得分:3)

我们可以使用ave按“&#39; y”分组,获取&#39; x&#39;中元素的逻辑索引。这不是&#39;模式&#39;,从那里得到行索引which

with(df, which(as.logical(ave(x, y, FUN= function(x) x!=Mode(x)))))
#[1]  9 10 16 17

或者正如评论中提到的@thelatemail,上面的内容可以做得紧凑

which(with(df, x != ave(x, y, FUN=Mode) )) 

其中Mode是(摘自here

Mode <- function(x) {
  ux <- unique(x)
 ux[which.max(tabulate(match(x, ux)))]
}