在R

时间:2018-01-15 19:04:49

标签: r statistics

我试图计算数据集的模式,如果没有模式则显示“NONE”。我目前正在使用Gregor的功能,如下所示。

的示例:

{1,1,2,2,3-} 预期结果1 2 (成功)

{NA,NA,NA,1,1,1,3,3-} 预期结果NA 1 (成功)

{1,2,3,4,5} 预期结果NONE (成功)

{1,1,1,1,1} 预期结果1 (失败)

编辑:我正在尝试if ...和函数,因为我意识到似乎存在一些逻辑问题。但我似乎无法破解它

smode<-function(x,...) {
ux <- unique(x)
tx <- tabulate(match(x, ux))
if(((unique(x)>=2)&(length(unique(tx)) == 1)) {

    return("NONE")
}
max_tx <- tx == max(tx)
return(ux[max_tx])
}

现在,{1,1,1,1,1,1}或任何其他类似的只显示NONE 只需再次检查,{1,1,1,2,2,2}也会显示NONE,而不是1 2

我认为对于更类似的事情它将是相同的。

编辑:我这么做了

function(x,...) {
ux <- unique(x)
tx <- tabulate(match(x, ux))
if(sum(tx)/length(tx) == 1) {

    return("NONE")
}
max_tx <- tx == max(tx)
return(ux[max_tx])
}

1 个答案:

答案 0 :(得分:0)

这个怎么样:

Mode <- function(x) {
  ux <- unique(x)
  tx <- tabulate(match(x, ux))
  if(length(unique(tx)) == 1) {
    message("None")
    return(NA)
  }
  max_tx <- tx == max(tx)
  return(ux[max_tx])
}

Mode(1:5)
# None
# [1] NA
Mode(c(1, 1, 2, 3))
# [1] 1
Mode(c(1, 1, 2, 2, 3))
# [1] 1 2
Mode(c(1, 1, 2, 2, 3, 3))
# None
# [1] NA

这是Ken William的Mode函数in this answer的略微修改。