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")
mam matrycę z manekinówWektoryzacja pętli z wielu warunków
> 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
że moje smoczki są powiązane tak, że linia 1 zgrupowanych z 2, 3 z 4 i 5 z 6 . Chcę podzielić każdy kod manekina (1) pomiędzy tymi w tej samej grupie na tej samej linii, jak wyżej:
> 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
aby to osiągnąć, mam następujące:
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
}
}
Moje pytanie brzmi, czy mogę to osiągnąć za pomocą wektoryzacji kodu. Nie mogę się dowiedzieć, jak używać ifelse
w tym przypadku, ponieważ nie mogę połączyć go z indeksowaniem linii, aby znaleźć 0.5
w każdej linii.
"Przyjęta" odpowiedź wybrana na podstawie jasnego i szczegółowego wyjaśnienia. Dziękuję Ci. – Tony