Другая base
альтернатива.Используйте tapply
для индексации ([
) «субъекта» внутри каждого «ИД», от 1 до max
группы length
и 3 (min_row_id).Для индексов, которые превышают длину группы, соответствующее значение равно NA
.
Воссоздайте 'ID' правильной длины путем rep
, присваивая имя элементов списка длине каждого элемента (lengths
),Используйте unlist
для создания столбца «Тема».
l <- tapply(d$subject, d$ID, function(x) x[1:(max(c(length(x), 3)))])
data.frame(id = rep(names(l), lengths(l)), subject = unlist(l, use.names = FALSE))
# id subject
# 1 1 A1
# 2 1 A2
# 3 1 <NA>
# 4 2 A1
# 5 2 <NA>
# 6 2 <NA>
# 7 3 A1
# 8 3 A2
# 9 3 A3
# 10 3 A4