给出如下数据框df
:
chrom position strand value label
chr1 17432 - 0 romeo
chr1 17433 - 0 romeo
chr1 17434 - 0 romeo
chr1 17435 - 0 romeo
chr1 17409 - 1 juliet
chr1 17410 - 1 juliet
chr1 17411 - 1 juliet
对于每组标签,我想对从1开始共享相同label
的行进行编号,并将这些数字放在新列中。 (我不只是想算数,他们的目标是给他们编号)。输出应该如下所示:
chrom position strand value label number
chr1 17432 - 0 romeo 1
chr1 17433 - 0 romeo 2
chr1 17434 - 0 romeo 3
chr1 17435 - 0 romeo 4
chr1 17409 - 1 juliet 1
chr1 17410 - 1 juliet 2
chr1 17411 - 1 juliet 3
是否有功能或包来完成这项工作?
答案 0 :(得分:2)
dat <- read.table(header = TRUE, text = "chrom position strand value label
chr1 17432 - 0 romeo
chr1 17433 - 0 romeo
chr1 17434 - 0 romeo
chr1 17435 - 0 romeo
chr1 17409 - 1 juliet
chr1 17410 - 1 juliet
chr1 17411 - 1 juliet")
#install.packages('dplyr')
library(dplyr)
dat %.%
group_by(label) %.%
mutate(number = 1:n())
Source: local data frame [7 x 6]
Groups: label
chrom position strand value label number
1 chr1 17432 - 0 romeo 1
2 chr1 17433 - 0 romeo 2
3 chr1 17434 - 0 romeo 3
4 chr1 17435 - 0 romeo 4
5 chr1 17409 - 1 juliet 1
6 chr1 17410 - 1 juliet 2
7 chr1 17411 - 1 juliet 3
我确信R. Data.Table还有很多其他可能性(见下面的例子)。不知道为什么我需要添加print()来显示结果。
require(data.table)
dt <- data.table(dat)
print(dt[, number := 1:.N, by = label])
chrom position strand value label number
1: chr1 17432 - 0 romeo 1
2: chr1 17433 - 0 romeo 2
3: chr1 17434 - 0 romeo 3
4: chr1 17435 - 0 romeo 4
5: chr1 17409 - 1 juliet 1
6: chr1 17410 - 1 juliet 2
7: chr1 17411 - 1 juliet 3
答案 1 :(得分:1)
执行Vincents解决方案导致我出错:
找不到功能“%。%”
然而,为%&gt;%更改%。%对我来说非常有用:
library(dplyr)
dat %>%
group_by(label) %>%
mutate(number = 1:n())
注意,我使用的是dplyr版本0.7.1