使用data.table或dplyr为每个因子级别的成员创建顺序ID

时间:2018-05-28 22:22:14

标签: r dplyr data.table

输入data.table:

            V1     V2  V3   V4   V5 V6 V7 V8                   V9
1: k141_100290 PROKKA CDS   62  364  .  -  . gene_id PROKKA_00256
2: k141_100292 PROKKA CDS  767 1198  .  -  . gene_id PROKKA_00257
3: k141_100292 PROKKA CDS 1201 1707  .  -  . gene_id PROKKA_00258
4: k141_100293 PROKKA CDS   79 1824  .  -  . gene_id PROKKA_00259
5: k141_100293 PROKKA CDS 1892 2152  .  -  . gene_id PROKKA_00260
6: k141_100293 PROKKA CDS 2155 2715  .  -  . gene_id PROKKA_00261
7: k141_100293 PROKKA CDS 2718 3641  .  -  . gene_id PROKKA_00262
8: k141_100293 PROKKA CDS 3647 4198  .  -  . gene_id PROKKA_00263
9: k141_100294 PROKKA CDS    1  222  .  +  . gene_id PROKKA_00264

对于V1中的每个要素级别,我需要在列seq_ID中创建顺序标签,如下所示:

            V1     V2  V3   V4   V5 V6 V7 V8                   V9        seq_ID
1: k141_100290 PROKKA CDS   62  364  .  -  . gene_id PROKKA_00256  k141_100290_1
2: k141_100292 PROKKA CDS  767 1198  .  -  . gene_id PROKKA_00257  k141_100292_1
3: k141_100292 PROKKA CDS 1201 1707  .  -  . gene_id PROKKA_00258  k141_100292_2
4: k141_100293 PROKKA CDS   79 1824  .  -  . gene_id PROKKA_00259  k141_100293_1
5: k141_100293 PROKKA CDS 1892 2152  .  -  . gene_id PROKKA_00260  k141_100293_2
6: k141_100293 PROKKA CDS 2155 2715  .  -  . gene_id PROKKA_00261  k141_100293_3
7: k141_100293 PROKKA CDS 2718 3641  .  -  . gene_id PROKKA_00262  k141_100293_4
8: k141_100293 PROKKA CDS 3647 4198  .  -  . gene_id PROKKA_00263  k141_100293_5
9: k141_100294 PROKKA CDS    1  222  .  +  . gene_id PROKKA_00264  k141_100294_1

看起来很简单,但我很困难。 data.table太大而无法由ddply处理,我需要data.tabledplyr解决方案。

1 个答案:

答案 0 :(得分:2)

这与Numbering rows within groups in a data frame

非常相似/可能重复

更改mnel答案所需的全部内容是使用row_number

粘贴V1
test <- data.frame(X = c("A","A","A","B","B","C","C","C","C"))
test %>% group_by(X) %>% mutate(seq_ID = paste(X, row_number(), sep = "_"))