2013-06-19 76 views
2

我有一個數據幀中的數字領域,如每月收入,範圍不同於INR 15000至60000印度盧比如何根據範圍創建因子列而不使用ifelse?

我想一個新的領域說income_group,這將有相應的收入範圍內的數說小於15000是1,大於15000但小於30000是2等等。

一種方法是使用嵌套ifelse語句這樣

mydataframe$incomegp <- ifelse(monthincome_condition, assign_number, 
           ifelse statement and so on) 

但正如我身邊有7個不同的號碼屬於這個範圍,所以我一直在尋找一個更好的解決方案。此外,用於分類的數字不是連續的,例如, 1,3,5,7,9,12,15。

我是新來的R,有人可以請建議一些替代品,不需要嵌套?

一個例子會很好,並會幫助我。

+1

使用'cut()'來做到這一點。 – Andrie

+0

好的,我會檢查功能,看看我是否可以完成這件事。謝謝。 – Poptimist

回答

5

下面的代碼片使用cut到數據的矢量切成4個類別(5箇中斷),具有的R內建的數據集的示例:

with(mtcars, cut(mpg, seq(min(mpg) * 0.99, 
          max(mpg) * 1.01, 
          length = 5))) 

注意,我添加* 0.99* 1.01因爲如果將它們設置爲數據本身的最小值和最大值,那麼等於最小/最大值的數據將被標記爲NA

如果您事先知道您的休息時間,您可以使用矢量(c(break_value1, break_value2, etc))手動指定它們,而不是使用seq即時生成它們。

+0

我正在試圖做這個例子切割aaa-> c(1,2,3,4,5,6,7,8,9,10)。現在我正在使用這個剪輯(aaa,c(0.9,2.9,5.9),labels = c(「A」,「B」,「C」))。我想要將1,2,4作爲A標記爲B,並將其作爲C標記,但它會引發錯誤「標記/間隔長度衝突」。正如我提到三個休息時間和三個標籤,爲什麼我得到這個錯誤。我認爲這需要回答解決我原來的問題。 – Poptimist

+1

請記住,三個中斷導致兩個標籤,<1,2>,<2,3>,並且您的示例導致了一些「NA」值:這種方法可以裁剪(1:10,c(0.9,2.9,5.9),labels = c(' A」, 'B'))。 –

+0

解決方案和解釋確實是重點和有用的。謝謝。 – Poptimist