У меня есть матрица (15000 x 3000). Целью является создание новой матрицы в соответствии с исходной матрицей и начальными значениями. Например, критерии, которые я хотел бы реализовать, следующие:R матрица операция
Вот как мой код настроен на данный момент.
DF1[1,]=1
for(i in 2:2000) {
for(j in 1:15000) {
if(DF[j,i] == 1 && DF1[j-1,i] == 0)
DF1[j,i] = 1
else if(DF[j,i] == 0 && DF1[j-1,i] == 1)
DF1[j,i] = 0
else DF[j,i,1] = DF1[j-1,i]
}
}
DF - это оригинальная матрица.
DF1 является новая матрица образована
Мой вопрос: есть ли другой способ сделать это? Быстрее?
Поскольку вложенные циклы не работают хорошо, я пытаюсь использовать apply, но я не знаю, как написать функцию, потому что она связана с двумя матрицами.
Пример
x <- structure(c(1L, 0L, 0L, NA, NA, 0L, NA, 0L, 1L, 0L, 1L, 0L, 0L,
NA, 0L, NA, 1L, NA, 1L, 0L, 1L, 0L, 1L, 0L), .Dim = c(4L, 6L), .Dimnames = list(
NULL, NULL))
x
# [,1] [,2] [,3] [,4] [,5] [,6]
#[1,] 1 NA 1 0 1 1
#[2,] 0 0 0 NA NA 0
#[3,] 0 NA 1 0 1 1
#[4,] NA 0 0 NA 0 0
и цикл (который не работает)
for(i in 1:4) {
for(j in 2:4) {
if(x[j,i] == 1 && y[j-1,i] == 0) {
y[j,i] = 1
}else{
if(x[j,i] == 0 && y[j-1,i] == 1) {
y[j,i] = 0
}else{
y[j,i] = y[j-1,i]
}
}
}
'DF [j, i, 1]' 3-мерный аль? – jogo
НЕТ, должен быть DF [j, i] – winnie
winnie, было бы здорово, если бы вы могли добавить небольшой пример с матрицей ввода и ожидаемым результатом. Спасибо – user20650