dummies = matrix(c(0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0), nrow=6, ncol=6)
colnames(dummies) <- c("a","b", "c", "d", "e", "f")
У меня есть матрица с манекенамиВекторизация из цикла с несколькими условиями
> dummies
a b c d e f
[1,] 0 0 0 0 1 0
[2,] 0 0 1 0 0 0
[3,] 1 0 0 0 0 0
[4,] 0 0 0 0 0 1
[5,] 0 1 0 0 0 0
[6,] 0 0 0 1 0 0
Я знаю, что мои соски связаны в этой строке 1, сгруппированная с 2, 3 с 4, и 5 с 6 . Я хочу, чтобы разделить каждый фиктивный код (1) между теми, в одной и той же группы на той же линии, что и выше:
> dummies
a b c d e f
[1,] 0.0 0.0 -0.5 0.0 0.5 0.0
[2,] 0.0 0.0 0.5 0.0 -0.5 0.0
[3,] 0.5 0.0 0.0 0.0 0.0 -0.5
[4,] -0.5 0.0 0.0 0.0 0.0 0.5
[5,] 0.0 0.5 0.0 -0.5 0.0 0.0
[6,] 0.0 -0.5 0.0 0.5 0.0 0.0
для достижения этой цели, я следующее:
dummies <- ifelse(dummies==1, 0.5, 0)
for (i in 1:nrow(dummies)){
column = which(dummies[i,] %in% 0.5)
if (i %% 2 != 0) {
dummies[i+1, column] <- -0.5
} else {
dummies[i-1, column] <- -0.5
}
}
Мой вопрос: смогу ли я достичь этого с помощью векторизованного кода. Я не могу понять, как использовать ifelse
в этом случае, потому что я не могу объединить его с индексированием строк, чтобы найти 0.5
на каждой строке.
Ответ «Принятый» выбран на основе четкого и подробного объяснения. Спасибо. – Tony