我希望在数据集中添加一个变量,对某些分组变量的实例进行排序。例如:
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
有什么想法吗?非常感谢!
答案 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())