7

定義:

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

st

> df1
  id v1
1  1  a
2  1  b
3  1  b
4  2  c
5  2  c
6  2  c

stによるfreq最も頻繁な観測を含む3番目の変数を作成したいv1id

> 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
4

3 に答える 3

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)

which.max同点の場合、最大値の最初の出現を返すことに注意してください。nnetランダムにタイを解除するオプションについては、パッケージの??which.is.maxを参照してください。

于 2011-06-28T21:51:40.540 に答える
1
mode <- function(x) names(table(x))[ which.max(table(x)) ]
df1$freq <- ave(df1$v1, df1$id, FUN=mode)
> df1
  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
于 2011-06-28T22:04:30.900 に答える