在下面的示例中,当我想确定组中最常见的值时,如何让R将领带标识为“平局”?
我基本上是继续使用which.max或which.is.max和自定义函数(Create a variable capturing the most frequent occurence by group)之前的问题,但我想承认这种关系是一个平局。有什么想法吗?
df1 <-data.frame(
id=c(rep(1,3),rep(2,3)),
v1=as.character(c("a","b","b",rep("c",3)))
)
我想创建第三个变量freq,它包含id中v1中最常见的观察值,但也会创建标识为“tie”的关系。
从以前的答案中,此代码可用于创建freq变量,但只是不处理关系:
myFun <- function(x){
tbl <- table(x$v1)
x$freq <- rep(names(tbl)[which.max(tbl)],nrow(x))
x
}
ddply(df1,.(id),.fun=myFun)
答案 0 :(得分:0)
您可以通过测试最大计数是否多次出现来稍微修改您的功能。这发生在sum(tbl == max(tbl))
中。然后继续进行。
df1 <-data.frame(
id=rep(1:2, each=4),
v1=rep(letters[1:4], c(2,2,3,1))
)
myFun <- function(x){
tbl <- table(x$v1)
nmax <- sum(tbl == max(tbl))
if (nmax == 1)
x$freq <- rep(names(tbl)[which.max(tbl)],nrow(x))
else
x$freq <- "tie"
x
}
ddply(df1,.(id),.fun=myFun)
id v1 freq
1 1 a tie
2 1 a tie
3 1 b tie
4 1 b tie
5 2 c c
6 2 c c
7 2 c c
8 2 d c