我有data.frame
看起来与此类似:
pp <- data.frame(a=c(1,1,1,2,2,3), zing=c("a", "b", "c", "d", "e", "f"))
pp
a zing
1 a
1 b
1 c
2 d
2 e
3 f
我想计算给定zing
变量a
的“唯一性”。因此,我的data.frame应如下所示:
a zing nr
1 a 1
1 b 2
1 c 3
2 d 1
2 e 2
3 f 1
感谢您的帮助。
答案 0 :(得分:4)
另一种选择是使用getanID
splitstackshape
library(splitstackshape)
getanID(pp,'a')
# a zing .id
#1: 1 a 1
#2: 1 b 2
#3: 1 c 3
#4: 2 d 1
#5: 2 e 2
#6: 3 f 1
答案 1 :(得分:3)
q <- transform(q, nr = ave(a, a, FUN = seq_along))
答案 2 :(得分:2)
使用data.table
的方法:
library(data.table)
##
q <- data.frame(
a=c(1,1,1,2,2,3),
zing=c("a", "b", "c", "d", "e", "f"),
stringsAsFactors=F)
setDT(q)
##
q[,nr:=1:.N,by=a]
##
> q
a zing nr
1: 1 a 1
2: 1 b 2
3: 1 c 3
4: 2 d 1
5: 2 e 2
6: 3 f 1
答案 3 :(得分:1)
这是使用dplyr的另一个选项:
library(dplyr)
pp %>% group_by(a) %>% mutate(nr = row_number())
如果您正在处理大型数据集,那么 dplyr和data.table将比ave
更有效。如果数据不是那么大,您可能不需要这些包。