2016-03-01 41 views
-3

我在包含一列命名爲H R 5具有一個數據幀:[R查找和創建索引「1」或「0」

H Index 
    11 
    11 
    11 
    11 
    12 
    12 
    12 
    13 
    13 
    14 
    14 
    15 
    15 
    15 
    16 
    17 
    18 
    19 
    20 
    20 
    20 
    21 
    22 
    23 
    00 
    00 
    00 
    01 
    01 
    02 
    03 
    04 
    04 
    04 
    04 
    05 
    06 
    07 
    07 
    07 
    08 
    09 
    09 
    09 
    10 
    11 
    12 

如何創建充滿1用於h不等的新列從10到18(eq,10,11,12,13,14,15,16,17和18),並且從19到09(方程19,20,21,22,23, 01,02,03,04,05,06,07,08和09)?

非常感謝。

+0

提示中提到的操作:閱讀'幫助( 「%在%」)'然後'幫助(邏輯)'什麼產生的根本整數值是。 –

回答

3

我們也可以做

df$Index <- +(df$H<19 & df$H>9) 

或用ifelse

df$Index <- ifelse(df$H < 19 & df$H >9, 1, 0) 

如果 'H' 欄是character,我們把它轉換爲numeric

df$H <- as.numeric(df$H) 

或者一世F IT是factor

df$H <- as.numeric(as.character(df$H)) 

,然後執行上述

df$Index <- +(df$H < 19 & df$H >9) 
+0

我的答案最初用於ifelse,但我被告知as.integer會更好(我同意它至少看起來更乾淨)。 '+(...)'符號做什麼?我認爲以前我沒有見過這種情況。 – Matthew

+2

@Mthethew對不起,我沒有檢查你的編輯。是的'ifelse'會比較慢,但它是一種規範的方法。使用'+'會強制'TRUE/FALSE'爲二進制'1/0'。即使我們與'as.integer'進行比較,它應該會更快(未測試) – akrun

+0

_ifelse_沒有問題。當我看到一個黃金徽章用戶推薦它時,我驚訝地發現它是另一個黃金徽章,告訴我最好不要使用它。我想,也許有些事我不知道,那就意味着要避免它。我不必經常這樣強迫,但我必須記住'+'符號。打字肯定少得多。 – Matthew

3

這很簡單,因爲您需要基於範圍的值。如果DF是數據幀,

df$H<19 & df$H>9 

會給你真/假測試向量如果該值在10至18或不在此範圍。使用as.integer函數,可以將其轉換爲1和0。

df$Index <- as.integer(df$H<19 & df$H>9) 

如果列是一個字符向量,我們可以先轉換爲數字值做測試

df$Index <- as.integer(as.integer(df$H)<19 & as.integer(df$H)>9) 

如果該值不是整數之前,我們可以使用as.numeric來代替內部演員。


這工作,因爲根據help(logical)被強制爲1,在數值範圍內調用時假被強制爲0,as.integer將遵循這些強制規則。我們可以用ifelse函數作爲ifelse(df$H<19&df$H>9,1,0)手動完成這個強制操作,該函數檢查這個邏輯向量中的每個元素,如果它是真的,則使用1;如果它是假,則使用1。

+0

H列是怎麼樣的? –

+0

@ Kuo-HsienChang我擴大了答覆覆蓋。 – Matthew