2013-04-06 75 views
0
x<-sample(30:60,50,TRUE) 
y<-cut(x,breaks=c(30,40,50,60)) 
y 
[1] (30,40] (30,40] (50,60] (40,50] (40,50] (40,50] (40,50] (30,40] (30,40] 
[10] (50,60] (30,40] (50,60] (30,40] (30,40] (50,60] (50,60] (50,60] (30,40] 
[19] (50,60] (30,40] (40,50] (40,50] (30,40] (30,40] (30,40] (40,50] (30,40] 
[28] (50,60] (40,50] (40,50] (30,40] (50,60] (40,50] (50,60] (50,60] (30,40] 
[37] (50,60] (50,60] (30,40] (50,60] (30,40] (30,40] <NA> (40,50] (30,40] 
[46] (40,50] (30,40] (30,40] (30,40] (30,40] 
Levels: (30,40] (40,50] (50,60] 
table(y) 
y 
(30,40] (40,50] (50,60] 
23 12 14 
table(y)[1] 
(30,40] 
23 

問題1:剪切和表功能

如果右= FALSE被添加,所述間隔是
(30,40](40,50](50,60]

如果右= TRUE被添加,所述間隔是
[30,40)[40,50)[50,60)

我怎樣才能獲得的間隔如[30,40] (40,50] (50,60]或「[30,40)[40,50 )[50,60]`?

問題2:?

table(y)[1] 
(30,40] 
23 

我知道有23個號碼在區間(30,40],我可以讓他們所有 x[x<=40 & x>30]
有沒有更好的方式來獲得結果

+2

將'include.lowest'參數設置爲'TRUE'? – Arun 2013-04-06 07:47:49

+0

問題1解決了,問題2呢? – 2013-04-06 07:51:23

+0

該參數只包含'[30,40]'(最低)。它仍然是'(40,50')和'(50,60'),我不確定這是否是你想要的,你能告訴你到底想要什麼嗎?你想能夠從30到40,和40 - 50等。 – Arun 2013-04-06 08:00:51

回答

0

的輸出對於你的問題#2它取決於w ^你的意思是「更好」。

這裏有一個選項:

library(TeachingDemos) 
x[ 30 %<% x %<=% 40 ] 

或者,而不是使用cut您可以使用findInterval

y <- findInterval(x, c(30,40,50,60)) 
x[ y==1 ] 

你也可以看看subset功能。

如果這些與您的「更好」的定義不符,請告訴我們更多關於您想要的內容。

1

對於問題2,簡單地使用你的切

x[y == "(30,40]"]