Вы можете сделать это сжато в базе R, используя aggregate
и ave
.
pstClps <- function(x) paste(x, collapse="") # pre-define FUN
aggregate(. ~ id + trt + period, transform(df, period=ave(period, id, trt, FUN=pstClps)), sum)
# id trt period pointA pointB pointC
# 1 1 A 123 13 19 8
# 2 2 A 123 24 22 16
# 3 1 B 456 22 23 17
# 4 2 B 456 6 12 18
Данные:
df <- structure(list(id = c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L,
2L, 2L), trt = c("A", "A", "A", "B", "B", "B", "A", "A", "A",
"B", "B", "B"), period = c(1L, 2L, 3L, 4L, 5L, 6L, 1L, 2L, 3L,
4L, 5L, 6L), pointA = c(3L, 4L, 6L, 10L, 3L, 9L, 10L, 7L, 7L,
1L, 3L, 2L), pointB = c(7L, 4L, 8L, 5L, 8L, 10L, 4L, 8L, 10L,
3L, 7L, 2L), pointC = c(3L, 4L, 1L, 4L, 9L, 4L, 5L, 6L, 5L, 2L,
9L, 7L)), row.names = c(NA, -12L), class = "data.frame")