异常记录

时间:2019-03-18 17:07:44

标签: r data.table

我有此数据。表A:

Person  characteristics1
     A                 1
     A                 1
     A                 2
     A                 1
     A                 1
     A                 1

人们可以看到“ characteristics1”中有2个异常记录。我如何编写一个函数来告诉我,既然“ characteristics1”列中的大多数记录为1,我想将“ 2”更改为“ 1”?

非常感谢

2 个答案:

答案 0 :(得分:3)

您正在寻找的模式。 R没有用于mode的内置函数,但是您可以创建一个函数来做到这一点:

library(data.table)
setDT(df)

getmode <- function(v) {
  uniqv <- unique(v)
  uniqv[which.max(tabulate(match(v, uniqv)))]
}

df[,characteristics1:=getmode(characteristics1), by=Person]

   Person characteristics1
1:      A                1
2:      A                1
3:      A                1
4:      A                1
5:      A                1
6:      A                1

答案 1 :(得分:0)

真的不知道您的思维方式有多正确,但是您可以寻找最重复的值并根据以下内容更新专栏:

df$characteristics1=names(which.max(table(df$characteristics1)))

如果仅使用数字,则用=as.numeric()右侧的部分包裹起来。