创建一个捕获组最常出现的变量

Fre*_*red 6 r frequency count data-manipulation data-management

限定:

df1 <-data.frame(
id=c(rep(1,3),rep(2,3)),
v1=as.character(c("a","b","b",rep("c",3)))
)
Run Code Online (Sandbox Code Playgroud)

ST

> df1
  id v1
1  1  a
2  1  b
3  1  b
4  2  c
5  2  c
6  2  c
Run Code Online (Sandbox Code Playgroud)

我想创建一个第三个变量freq包含最常见的观察v1idST

> df2
  id v1 freq
1  1  a    b
2  1  b    b
3  1  b    b
4  2  c    c
5  2  c    c
6  2  c    c
Run Code Online (Sandbox Code Playgroud)

jor*_*ran 3

您可以使用ddply自定义函数来选择最常见的值来执行此操作:

myFun <- function(x){
    tbl <- table(x$v1)
    x$freq <- rep(names(tbl)[which.max(tbl)],nrow(x))
    x
}

ddply(df1,.(id),.fun=myFun)
Run Code Online (Sandbox Code Playgroud)

请注意,which.max在出现平局的情况下,将返回第一次出现的最大值。请参阅包中的 ??which.is.maxnnet以了解随机打破平局的选项。