Помогите мне заменить цикл на функцию «Применить»

... если это возможно

Моя задача - найти самую длинную серию непрерывных дней, когда пользователь участвовал в игре.

Вместо того, чтобы писать функцию sql, я решил использовать функцию rle R, чтобы получить самые длинные полосы, а затем обновить свою таблицу БД с результатами.

(Прикрепленный) фрейм данных выглядит примерно так:

    day      user_id
2008/11/01    2001
2008/11/01    2002
2008/11/01    2003
2008/11/01    2004
2008/11/01    2005
2008/11/02    2001
2008/11/02    2005
2008/11/03    2001
2008/11/03    2003
2008/11/03    2004
2008/11/03    2005
2008/11/04    2001
2008/11/04    2003
2008/11/04    2004
2008/11/04    2005

Я попробовал следующее, чтобы получить для каждого пользователя самую длинную полосу

# turn it to a contingency table
my_table <- table(user_id, day)

# get the streaks
rle_table <- apply(my_table,1,rle)

# verify the longest streak of "1"s for user 2001
# as.vector(tapply(rle_table

К сожалению, этот цикл for занимает слишком много времени, и мне интересно, есть ли способ получить матрицу res с использованием функции из семейства «apply».

заранее спасибо

2001'$lengths, rle_table

К сожалению, этот цикл for занимает слишком много времени, и мне интересно, есть ли способ получить матрицу res с использованием функции из семейства «apply».

заранее спасибо

2001'$values, max)["1"]) # loop to get the results # initiate results matrix res<-matrix(nrow=dim(my_table)[1], ncol=2) for (i in 1:dim(my_table)[1]) { string <- paste("as.vector(tapply(rle_table

К сожалению, этот цикл for занимает слишком много времени, и мне интересно, есть ли способ получить матрицу res с использованием функции из семейства «apply».

заранее спасибо

", rownames(my_table)[i], "'$lengths, rle_table

К сожалению, этот цикл for занимает слишком много времени, и мне интересно, есть ли способ получить матрицу res с использованием функции из семейства «apply».

заранее спасибо

", rownames(my_table)[i], "'$values, max)['1'])", sep="") res[i,]<-c(as.integer(rownames(my_table)[i]) , eval(parse(text=string))) }

К сожалению, этот цикл for занимает слишком много времени, и мне интересно, есть ли способ получить матрицу res с использованием функции из семейства «apply».

заранее спасибо

Ответы на вопрос(5)

Ваш ответ на вопрос