2013-10-09 19 views
0

我已經知道了一個非常簡單的問題,但我很困惑,似乎缺乏詞彙表來搜索有效的搜索欄。從邏輯測試中創建數據框

我有一個數據幀完全與此類似數字的(雖然不是同一類的)

Dat <- structure(c(9L, 9L, 3L, 3L, 2L, 9L, 10L, 5L, 6L, 2L, 4L, 6L, 
10L, 2L, 9L, 0L, 1L, 8L, 9L, 7L, 7L, 4L, 4L, 3L, 4L, 7L, 7L, 
1L, 0L, 3L, 6L, 10L, 8L, 3L, 0L, 7L, 7L, 1L, 2L, 8L, 5L, 7L, 
7L, 8L, 2L, 1L, 10L, 3L, 0L, 2L, 7L, 0L, 0L, 7L, 9L, 8L, 9L, 
0L, 4L, 4L, 5L, 6L, 6L, 2L, 4L, 1L, 6L, 2L, 4L, 7L, 5L, 2L, 7L, 
4L, 8L, 3L, 3L, 2L, 5L, 1L, 1L, 3L, 8L, 0L, 1L, 8L, 8L, 1L, 1L, 
0L, 4L, 4L, 4L, 5L, 6L, 9L, 5L, 2L, 6L, 3L), .Dim = c(10L, 10L 
)) 

所有我想要做的就是用1替換所有值> 5,且小於所有值5與0我得到儘可能得到一個幀與真和假,但似乎無法弄清楚如何取代東西。

Datlog <- Dat > 5 

任何幫助將不勝感激。謝謝。

+0

你的意思是像'(DAT> 5 )* 1'? – A5C1D2H2I1M1N2O1R2T1

+0

上帝是可笑的。是的,似乎已經奏效。你能解釋爲什麼/如何? – user2510207

回答

2

如果我正確地讀你的問題,你會踢自己的答案:

(Dat > 5) * 1 

TRUEFALSE R中分別等同於10。因此,更多的語義正確的方式做,這會是這樣的:

out <- as.numeric(Dat > 5) 
dim(out) <- dim(Dat) 

的兩步法,需要在第二個方法,因爲當你使用as.numeric,原始數據的dim s的丟失。用不同的值替換


一種方法是使用factor

out <- factor((Dat > 5), c(TRUE, FALSE), c("YES", "NO")) 
dim(out) <- dim(Dat) 

另一種方法是基本的子集和替代:

out <- Dat 
out[out > 5] <- 999 
out[out <= 5] <- 0 
out 
+0

啊,我明白了,所以1 * 1給了我一個1和0 * 1給出0.如果我想要1或0以外的東西,該怎麼辦? – user2510207

+0

@ user2510207,仍然只是兩個範圍?你能舉一個你可能想要替換它們的例子嗎? – A5C1D2H2I1M1N2O1R2T1

+0

上面已經介紹了它。這非常有幫助,謝謝! – user2510207