数据:
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
答案 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)))]
}