如果您的数据集被称为 dat 使用ave
是一种方法:
## dat <- read.table(text="Key User
## 1 Bob
## 2 Tobi
## 1 Bob
## 3 Bob
## 4 Bob
## 5 Bob
## 6 Tobi
## 5 Bob", header=TRUE)
dat$Freq <- paste(with(dat, ave(Key, Key, FUN=length)),
with(dat, ave(as.character(User), User, FUN=length)), sep="/")
## Key User Freq
## 1 1 Bob 2/6
## 2 2 Tobi 1/2
## 3 1 Bob 2/6
## 4 3 Bob 1/6
## 5 4 Bob 1/6
## 6 5 Bob 2/6
## 7 6 Tobi 1/2
## 8 5 Bob 2/6
稍微分解一下
这给出了按键的频率:
## + > with(dat, ave(Key, Key, FUN=length))
## [1] 2 1 2 1 1 2 1 2
这给出了用户的分母频率(尽管你的一个是 2,我不确定我是否错过了一些东西):
## > with(dat, ave(as.character(User), User, FUN=length))
## [1] "6" "2" "6" "6" "6" "6" "2" "6"
然后我将两者粘贴在一起。
编辑-per Ananda Mahto 评论:
如果您要获取实际值(可能是十进制),请使用与上述相同的形式,但最后一步是除法,而不是粘贴:
dat$Freq2 <- with(dat, ave(Key, Key, FUN=length))/
with(dat, as.numeric(ave(as.character(User), User, FUN=length)))