Несколько вариантов приходят на ум, используя ваши данные в качестве примера:
dat <- data.frame(X = c("a", "b"), Y = c(1,4), Freq = c(3,2),
stringsAsFactors = FALSE)
Первый вариант:
do.call(cbind.data.frame, lapply(dat[,-3], rep, times = dat[,3]))
А вторая маленькая функция:
foo <- function(dat) {
data.frame(X = rep(dat$X, times = dat$Freq),
Y = rep(dat$Y, times = dat$Freq))
}
foo(dat)
А еще есть:
> with(dat, dat[, 1:2][rep(seq_along(Freq), times = Freq),])
X Y
1 a 1
1.1 a 1
1.2 a 1
2 b 4
2.1 b 4