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")
Tôi có một ma trận với núm vú cao suVectorisation của vòng lặp for với nhiều điều kiện
> 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
Tôi biết rằng núm vú cao su của tôi có liên quan trong đó dòng 1 được nhóm với 2, 3 với 4, và 5 với 6 . tôi muốn chia mỗi mã giả (1) giữa những người trong cùng một nhóm trên cùng một dòng như trên:
> 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
để đạt được điều này, tôi thực hiện như sau:
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
}
}
Câu hỏi của tôi là liệu tôi có thể đạt được điều này với mã được vector hóa hay không. Tôi không thể tìm ra cách sử dụng ifelse
trong trường hợp này vì tôi không thể kết hợp nó với chỉ mục dòng để tìm số 0.5
trên mỗi dòng.
Câu trả lời 'Chấp nhận' được chọn dựa trên giải thích rõ ràng và chi tiết. Cảm ơn bạn. – Tony