我有此数据。表A:
Person characteristics1
A 1
A 1
A 2
A 1
A 1
A 1
人们可以看到“ characteristics1”中有2个异常记录。我如何编写一个函数来告诉我,既然“ characteristics1”列中的大多数记录为1,我想将“ 2”更改为“ 1”?
非常感谢
答案 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()
右侧的部分包裹起来。