1

在以下示例中,当我想确定组内最频繁的值时,如何要求 R 将平局识别为“平局”?

我基本上是从上一个问题开始的,它使用了 which.max 或 which.is.max 和一个自定义函数(创建一个按组捕获最频繁出现的变量),但我想承认这些关系是一个关系。有任何想法吗?

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

我想创建第三个变量 freq ,它包含 v1 中按 id 最常见的观察,但也创建了标识为“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)
4

1 回答 1

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
于 2014-01-03T07:29:39.373 回答