2014-03-19 227 views
0

首先,我有一個向量s = c(0,2,4,2,2,4,3,6,7)。 我寫的代碼:將數據集轉換爲二進制

s1 <- as.factor(s) 
    n <- length(s1) 
    x <- matrix(0, n, length(levels(s1))) 
    x[(1:n) + n*(unclass(s1)-1)] <- 1 

接着,我獲得的矩陣:

> x 
     [,1] [,2] [,3] [,4] [,5] [,6] 
[1,] 1 0 0 0 0 0 
[2,] 0 1 0 0 0 0 
[3,] 0 0 0 1 0 0 
[4,] 0 1 0 0 0 0 
[5,] 0 1 0 0 0 0 
[6,] 0 0 0 1 0 0 
[7,] 0 0 1 0 0 0 
[8,] 0 0 0 0 1 0 
[9,] 0 0 0 0 0 1 

但是,現在,我想改變該限制: 在矩陣的一列,例如第1欄: x [i,1] = 1當且僅當s [i]> s [1],否則x [i,1] = 0。如果s [1] = 0,所有其他x [i,1] = 1,除了s [i] = 0。

在這個例子中,我想獲得一個矩陣:

 [,1] [,2] [,3] [,4] [,5] [,6] 
[1,] 0 0 0 0 0 0 
[2,] 1 0 0 0 0 0 
[3,] 1 1 1 0 0 0 
[4,] 1 0 0 0 0 0 
[5,] 1 0 0 0 0 0 
[6,] 1 1 1 0 0 0 
[7,] 1 1 0 0 0 0 
[8,] 1 1 1 1 1 0 
[9,] 1 1 1 1 1 0 

謝謝。

+0

初始矩陣如何與最後一個目前尚不清楚。你能詳細解釋一下你的轉變嗎? – tonytonov

+0

我認爲,如果您給我們更多的背景知識,並解釋您的總體目標,以及如何將其翻譯爲「(1:n)+ n *(unclass(s​​1)-1)」,則會更容易。 – Henrik

回答

1

我不知道,我明白你的問題的權利(和我最後的矩陣看起來不一樣一點點):

s <- c(0,2,4,2,2,4,3,6,7) 
us <- unique(s) 
sapply(seq_along(us), function(i)ifelse(s > us[i], 1, 0)) 

#  [,1] [,2] [,3] [,4] [,5] [,6] 
# [1,] 0 0 0 0 0 0 
# [2,] 1 0 0 0 0 0 
# [3,] 1 1 0 1 0 0 
# [4,] 1 0 0 0 0 0 
# [5,] 1 0 0 0 0 0 
# [6,] 1 1 0 1 0 0 
# [7,] 1 1 0 0 0 0 
# [8,] 1 1 1 1 0 0 
# [9,] 1 1 1 1 1 0 
+0

非常感謝。你的是真的。克服「接受」 – clairsang

相關問題