为给定嵌套变量的出现创建编号序列

时间:2014-08-01 03:35:10

标签: r sequence sequences

我希望在数据集中添加一个变量,对某些分组变量的实例进行排序。例如:

ids <- c(rep(1,4),rep(2,6),rep(3,2))

我想要另一个可以计算每个id出现的实例的变量。创建这样的矢量:

1,2,3,4,1,2,3,4,5,6,1,2

他们结合起来看起来像这样:

    ids count
1    1      1
2    1      2
3    1      3
4    1      4
5    2      1
6    2      2
7    2      3
8    2      4
9    2      5
10   2      6
11   3      1
12   3      2

有什么想法吗?非常感谢!

2 个答案:

答案 0 :(得分:2)

我建议使用ave

seq_along
ids <- c(rep(1,4),rep(2,6),rep(3,2))
count <- ave(ids,ids, FUN=seq_along)
cbind(ids, count)

#       ids count
#  [1,]   1     1
#  [2,]   1     2
#  [3,]   1     3
#  [4,]   1     4
#  [5,]   2     1
#  [6,]   2     2
#  [7,]   2     3
#  [8,]   2     4
#  [9,]   2     5
# [10,]   2     6
# [11,]   3     1
# [12,]   3     2

答案 1 :(得分:0)

或者如果订购

cbind(ids, count=sequence(unname(table(ids))))
#       ids count
#  [1,]   1     1
#  [2,]   1     2
#  [3,]   1     3
#  [4,]   1     4
#  [5,]   2     1
#  [6,]   2     2
#  [7,]   2     3
#  [8,]   2     4
#  [9,]   2     5
# [10,]   2     6
# [11,]   3     1
# [12,]   3     2

或者

  cbind(ids,within.list(rle(ids), lengths <- sequence(lengths))$lengths)

或者

 library(data.table)
 dt <- as.data.table(ids)
 dt[,count:=seq_len(.N), by=ids]

或者

library(dplyr)
dat <- data.frame(ids)
dat %>% 
group_by(ids) %>%
mutate(count=row_number())