2014-09-10 40 views
0

我正在使用R並希望停止使用分支和語句以利用apply函數。話雖這麼說,我有這個名單,X:使用應用函數代替R和R中的分支語句

X < - C(5,12,19,26,2,9,16,23)

我想一個對應列表如下:

for i in x 
    if (i<=7) 1 
    else if (i<=14) 2 
    else if (i<=21) 3 
    else if (i<=28) 4 
    else 5 

最終的新名單將是:1,2,3,4,1,2,3,4

我怎麼能做到這一點與應用語句之一?每次我嘗試寫一篇文章時,我最終都會撓頭一小時,然後在這裏發表一個問題。

謝謝。

+0

這不是做'* apply'功能。你可以使用嵌套的'ifelse'(矢量化),但是有更好的可能性。 – Roland 2014-09-10 15:58:33

+0

@Roland,但是'ifelse'在這裏不起作用,因爲有幾個條件語句,對吧?除非我錯過了一些東西。 – ddiez 2014-09-10 16:01:57

+0

@ddiez請注意單詞「嵌套」。 – Roland 2014-09-10 16:03:34

回答

2

只需使用cut

x <- c(5, 12, 21, 35) 

as.integer(cut(x, c(-Inf, 7, 14, 21, 28, Inf))) 
#[1] 1 2 3 5 
+0

這個工作'findInterval(x,c(-Inf,7,14,21,28,Inf)+1)'。 – akrun 2014-09-10 16:06:55

+1

@akrun它取決於x是一個整數向量,我不想這樣做。 – Roland 2014-09-10 16:10:11

+0

感謝您的輸入 – akrun 2014-09-10 16:11:18

0

顯示ifelse使用:

ifelse(x<7,1,ifelse(x<14,2,ifelse(x<21,3,ifelse(x<28,4,5)))) 
[1] 1 2 3 4 1 2 3 4