如何在创建捕获组中最常出现的变量时标记关系?

时间:2014-01-03 07:13:54

标签: r frequency tie

在下面的示例中,当我想确定组中最常见的值时,如何让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)

1 个答案:

答案 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