Используйте apply
с rep(..., each=10)
.
Если ваши данные такие, как вы говорите, то следующая команда расширит кадр данных с одного на 145 столбцов (последовательный + 144 10-минутных интервалов в одном 24-часовой период) в один с 1441 столбцом (последовательный + 1440 1-минутных интервалов в одном 24-часовом периоде).
Activities1 <- data.frame(Activities[,1],
t(apply(Activities[,-1], 1, FUN=rep, each=10)))
names(Activities1) <- c("serial", paste("act1", seq_len(1440), sep="_"))
dim(Activities1)
#[1] 16533 1441
Что касается вашей функции, я исправил ошибку в соответствии с вашим комментарием.
transition.matrix <- function(X, prob=T)
{
tt <- table( c(X[,-ncol(X)]), c(X[,-1]) )
if(prob) tt <- tt / rowSums(tt)
tt
}
И, возможно, пропустите последовательный столбец при вызове функции. Вот результат для 10-минутных интервалов:
transitionfunction <- transition.matrix(as.matrix(Activities[,-1]))
transitionfunction
# 110 111 123
# 110 0.334 0.332 0.333
# 111 0.334 0.333 0.332
# 123 0.332 0.333 0.335
Учитывая, что данные случайные (см. Ниже), результат выглядит разумным
Теперь для 1-минутных интервалов. Вам придется подождать около 1 минуты из-за большего размера данных.
transitionfunction <- transition.matrix(as.matrix(Activities1[,-1]))
transitionfunction
# 110 111 123
# 110 0.9338 0.0331 0.0331
# 111 0.0332 0.9337 0.0331
# 123 0.0331 0.0331 0.9338
Учитывая, что мы повторили каждое действие 10 раз, результаты кажутся правильными.
Данные (смоделировано):
n <- 16533
ncol <- 144
set.seed(404)
Activities <- data.frame(serial=1:n,
matrix(sample(c(110,111,123), size=n*ncol, replace=TRUE), ncol=144))
dim(Activities)
names(Activities) <- c("serial", paste("act1", 1:ncol, sep="_"))
Activities[1:6, 1:11]
serial act1_1 act1_2 act1_3 act1_4 act1_5 act1_6 act1_7 act1_8 act1_9 act1_10
1 1 111 123 110 110 111 111 111 110 110 110
2 2 123 111 123 110 111 123 123 110 111 110
3 3 111 111 111 111 123 111 123 123 110 123
4 4 123 111 110 111 111 110 123 110 111 111
5 5 110 123 110 111 110 110 111 110 123 111
6 6 111 111 111 123 123 110 123 111 110 123