创建一个捕获最频繁出现的变量的变量 [英] 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)))
)
st
> df1
id v1
1 1 a
2 1 b
3 1 b
4 2 c
5 2 c
6 2 c
我想创建一个第三个变量 freq
包含 v1 由
id
st
I want to create a third variable freq
that contains the most frequent observation in v1
by id
s.t.
> 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
推荐答案
ddply 和一个自定义函数来选择最常用的值:
You can do this using ddply
and a custom function to pick out the most frequent value:
myFun <- function(x){
tbl <- table(x$v1)
x$freq <- rep(names(tbl)[which.max(tbl)],nrow(x))
x
}
ddply(df1,.(id),.fun=myFun)
b $ b
请注意,如果是tie, which.max
将返回最大值的第一次出现。参见 nnet
包中的which.is.max,用于随机打破关系的选项。
Note that which.max
will return the first occurrence of the maximum value, in the case of ties. See ??which.is.max in the nnet
package for an option that breaks ties randomly.
这篇关于创建一个捕获最频繁出现的变量的变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文