Вы можете использовать rep
, чтобы получить уникальные идентификаторы для групп из 3, например:
rep(seq_len(nrow(x)/3), each=3)
[1] 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5
Если вам нужна комбинация, показанная в вопросе, вы можете использовать ave
для группировки по plate
и используйте paste
и rep
для получения уникальных идентификаторов.
ave(x$plate, x$plate, FUN=function(x) {
paste(x, rep(seq_len(length(x)/3), each=3), sep=".")})
# [1] "A.1" "A.1" "A.1" "A.2" "A.2" "A.2" "A.3" "A.3" "A.3" "B.1" "B.1" "B.1"
#[13] "B.2" "B.2" "B.2"
или split
и lapply
unlist(lapply(split(x$plate, x$plate), FUN=function(x) {
paste(x, rep(seq_len(length(x)/3), each=3),sep=".")}))
Данные:
x <- read.table(header=TRUE, stringsAsFactors=FALSE, text="plate phase score
A 1 1
A 2 1
A 3 2
A 1 1
A 2 1
A 3 2
A 1 1
A 2 1
A 3 2
B 1 1
B 2 1
B 3 2
B 1 1
B 2 1
B 3 2")