首页 > 解决方案 > 如何为重复值创建序列列?

问题描述

我有一个像这样创建的df:

ID <- c(1, 2, 3, 4)
count <- c(2, 4, 6, 10)
data <- data.frame(ID, count)
data <- data[rep(1:nrow(data), data$count),]
print(data)

我想要另一列基本上打印计数的顺序?我不确定如何最好地描述我所得到的基本上我希望它看起来像以下输出:

    ID count sequence
1    1     2        1
1.1  1     2        2
2    2     4        1
2.1  2     4        2
2.2  2     4        3
2.3  2     4        4
3    3     6        1
3.1  3     6        2
3.2  3     6        3
3.3  3     6        4
3.4  3     6        5
3.5  3     6        6
4    4    10        1
4.1  4    10        2
4.2  4    10        3
4.3  4    10        4
4.4  4    10        5
4.5  4    10        6
4.6  4    10        7
4.7  4    10        8
4.8  4    10        9
4.9  4    10       10

谢谢

标签: r

解决方案


我们可以用rowid

library(dplyr)
library(data.table)
data %>% 
    mutate(sequence = rowid(ID))
#     ID count sequence
#1    1     2        1
#1.1  1     2        2
#2    2     4        1
#2.1  2     4        2
#2.2  2     4        3
#2.3  2     4        4
#3    3     6        1
#3.1  3     6        2
#3.2  3     6        3
#3.3  3     6        4
#3.4  3     6        5
#3.5  3     6        6
#4    4    10        1
#4.1  4    10        2
#4.2  4    10        3
#4.3  4    10        4
#4.4  4    10        5
#4.5  4    10        6
#4.6  4    10        7
#4.7  4    10        8
#4.8  4    10        9
#4.9  4    10       10

如果它基于“计数”列

data %>%
     mutate(sequence = rowid(count))

或使用avefrombase R

data$sequence <- with(data, ave(seq_along(ID), ID, FUN = seq_along))

推荐阅读