Мы можем использовать rowid
из data.table
library(data.table)
df1$Id <- with(df1, rowid(Treatments, Replicates))
Или использовать data.table
синтаксис
setDT(df1)[, Id := rowid(Treatments, Replicates))]
Если нам нужен идентификатор группы, используйте .GRP
setDT(df1)[, Id := .GRP, .(Treatments, Replicates)]
Или используя dplyr
df1 %>%
group_by(Treatments, Replicates) %>%
mutate(Id = row_number())
Чтобы получить групповые индексы, в версии devel
df1 %>%
group_by(Treatments, Replicates) %>%
mutate(Id = cur_group_id())
Или в текущем dplyr
версия
df1 %>%
mutate(Id = group_indices(., Treatments, Replicates))
В base R
это можно сделать с помощью ave
df1$Id <- with(df1, ave(seq_along(Treatments), Treatments,
Replicates, FUN = seq_along))
data
df1 <- structure(list(Treatments = c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L,
2L, 2L, 2L, 2L), Replicates = c(1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L,
1L, 2L, 2L, 2L), Value = c(4L, 5L, 7L, 9L, 25L, 39L, 43L, 24L,
12L, 9L, 4L, 2L), Id = c(NA_integer_, NA_integer_, NA_integer_,
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_,
NA_integer_, NA_integer_, NA_integer_, NA_integer_)), row.names = c(NA,
-12L), class = "data.frame")