2013-11-20 66 views
5

我正在尋找R中的指示函數,即如果函數返回1,如果向量中元素的值大於0並返回零,如果元素的值在一個向量小於0.R中的指示函數

我需要在向量中的所有元素上使用這個函數,返回一個只有零和1的新向量。

謝謝。

+0

正常的'>'運算符有什麼問題? –

+1

'as.numeric(x> 0)'應該有效。 –

回答

4

如果我能夠正確理解你,那麼你想要改變整個數據框,假設我可以建議你使用像下面這樣的應用,其中df是你的數據框。

apply(df,2,function(x)ifelse((x>0),1,0)) 

您還可以,如果它像下面只有一個矢量東西使用:

x <- c(-2,3,1,0) 
y <- ifelse(x>0,1,0) 
print(y) 
[1] 0 1 1 0 #Output 

希望這有助於

+0

超酷;謝謝! –

6

有多種方式,最小的按鍵之一:

Ivec <- 0+(vec>0) 

保存幾個擊鍵:as.numeric(vec>0)。我猜想ifelse(x>0,1,0) -approach如果適用於大型矢量或用於仿真,會稍微慢一些。也可以使用:

Ivec <- 1*(vec>0) 
+0

哇,+ 1,我知道0+技巧,真棒 – PKumar

1

I功能在R,稱爲禁止口譯/轉換的對象起作用,可以用於此目的。例如,該線以下返回值,其中X = {0,1,2,3,4,5}的函數I(X < 4):

> I(0:5 < 4) 
[1] TRUE TRUE TRUE TRUE FALSE FALSE 

就R TRUEFALSE可以治療如1和0,但如果你堅持你的輸出正是這些數字,只需將你的I函數包裝成as.numeric

+1

爲什麼你使用Asis函數...不使用它返回相同的對象('0:5 <4')。當你使用它時,返回的對象現在是'AsIs'類(這可能會產生意想不到的下游結果) – user20650

0

還有R中

指示符(X,最小,最大)

-Inf和INF仍然是有效的值的內置指示器功能。