给定两个变量创建序号

时间:2014-11-12 15:10:22

标签: r plyr

我有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

感谢您的帮助。

4 个答案:

答案 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更有效。如果数据不是那么大,您可能不需要这些包。