2013-01-16 36 views
1

我在R中尋找一種方式來完成類似於SQL中的CASE-WHEN功能的方法。有一個與收入範圍有關的變量,我需要創建兩個新變量,其值是範圍的最小值和最大值。下面的代碼並不完全是R,並不完全是SQL,而是一些中間的東西。希望我很清楚自己想要做什麼。來自SQL的CASE-WHEN的R版本

如果(INCOME_CD == 「A」){
income.min < - 1000
income.max < - 14999
}否則如果(INCOME_CD == 「B」){
收入。分< - 15000
income.max < - 24999


}其他{
income.min < - 99999
income.max < - 999999
}

回答

2

可以使用switch

這裏的最後一個值是默認

switch (INCOME_CD , 
     A= list(income.min = 1000,income.max = 14999), 
     B =list(income.min = 15000, income.max = 24999), 
     list(income.min = 99999,income.max = 999999)) 

例如

以上
INCOME_CD <- 'A' 

代碼返回

$income.min 
[1] 1000 
$income.max 
[1] 14999 

EDIT澄清到OP

一般我們在一個函數使用此代碼。

get.income <- function(INCOME_CD){ 
switch (INCOME_CD , 
     A= list(income.min = 1000,income.max = 14999), 
     B =list(income.min = 15000, income.max = 24999), 
     list(income.min = 99999,income.max = 999999)) 
} 

> get.income('A') 
$income.min 
[1] 1000 

$income.max 
[1] 14999 

> get.income('B') 
$income.min 
[1] 15000 

$income.max 
[1] 24999 

> get.income('C') 
$income.min 
[1] 99999 

$income.max 
[1] 999999 
+0

謝謝,我見過'switch'的幾個例子,但它看起來並不像我想要的那樣。 – Oliver

+0

@Oliver方面注意:你可以用任何R表達式代替INCOME_CD ... – agstudy

+0

我試過上面的代碼,R給了我這個錯誤信息:EXPR必須是長度爲1的矢量 – Oliver