Я пытаюсь создать матрицу «по фильтрам», которую я могу использовать для выделения строк данных в моем фрейме данных, чтобы каждая строка содержала только значения, соответствующие самой длинной последовательной последовательности того же номера,в то время как остальные держат ноль.После поисков я думаю, что функция - это rle, но это не дает мне того, что я хочу.Вот пример моего кода и результатов.Предложения и решения будут очень признательны.Спасибо!
ОБРАЗЦЫ ДАННЫХ:
a<- c(1,0,1,1,1,1,0,0)
b<- c(0,0,0,1,1,1,0,1)
c<- c(0,0,1,1,0,0,0,1)
d<- c(1,0,0,1,1,1,1,0)
e<- c(1,0,0,1,0,0,1,1)
f<- c(0,0,0,1,1,1,0,1)
g<- c(0,0,1,1,0,0,0,1)
test.data <- data.frame(cbind(a,b,c,d,e,f,g))
# > test.data
# a b c d e f g
# 1 1 0 0 1 1 0 0
# 2 0 0 0 0 0 0 0
# 3 1 0 1 0 0 0 1
# 4 1 1 1 1 1 1 1
# 5 1 1 0 1 0 1 0
# 6 1 1 0 1 0 1 0
# 7 0 0 0 1 1 0 0
# 8 0 1 1 0 1 1 1
ОБРАЗЕЦ КОДА ДЛЯ ПОПЫТКИ РЕШЕНИЯ:
result <- data.frame(lapply(test.data, function(x) {
r <- rle(x)
r$values[r$lengths!=max(r$lengths)]==1
r2=inverse.rle(r)
r2
}))
РЕЗУЛЬТАТ Я ПОЛУЧАЮ (похоже на точную копию того, что вошло?):
# > result
# a b c d e f g
# 1 1 0 0 1 1 0 0
# 2 0 0 0 0 0 0 0
# 3 1 0 1 0 0 0 1
# 4 1 1 1 1 1 1 1
# 5 1 1 0 1 0 1 0
# 6 1 1 0 1 0 1 0
# 7 0 0 0 1 1 0 0
# 8 0 1 1 0 1 1 1
ЭТО РЕЗУЛЬТАТ, КОТОРЫЙ Я ХОЧУ ПОЛУЧИТЬ (T / F можно использовать вместо 1 и 0, если проще):
# > result
# a b c d e f g
# 1 0 0 0 1 1 0 0
# 2 0 0 0 0 0 0 0
# 3 0 0 0 0 0 0 0
# 4 1 1 1 1 1 1 1
# 5 1 1 0 0 0 0 0
# 6 1 1 0 0 0 0 0
# 7 0 0 0 1 1 0 0
# 8 0 0 0 0 1 1 1
ПОЖАЛУЙСТА, СОВЕТУЙТЕ!