2017-06-21 22 views
2

逆序我想根據給定的截止值(或中斷)到箱中在R.的R - 具有切割

這可以作爲隨後分裂向量:

numbers <- 1:10 
cutoffs <- c(0,2,6,7,10, Inf) 

data.frame(data = numbers, bins = as.integer(cut(numbers, breaks = cutoffs, right = FALSE))) 

這將導致在以下內容:

data bins 
1  1 1 
2  2 2 
3  3 2 
4  4 2 
5  5 2 
6  6 3 
7  7 4 
8  8 4 
9  9 4 
10 10 5 

不過,我想要的是是在最高的倉,反之亦然最低值。所以不知何故,我想實現以下代替:

data bins 
1  1 5 
2  2 4 
3  3 4 
4  4 4 
5  5 4 
6  6 3 
7  7 2 
8  8 2 
9  9 2 
10 10 1 

我已經嘗試了許多與'rev()'的組合來顛倒序列。但請記住,我不能扭轉早期裁員命令的結果,因爲它們是不對稱的。

我意識到可能有一個簡單的解決方案,但由於某種原因,它一直逃避我。我應該看哪個方向的任何建議?

+6

Couldn」你從6中減去原來的「箱子」? –

+1

你可以使用'labels'參數..'as.integer(as.character(cut(numbers,breaks = cutoffs,labels = 5:1,right = FALSE)))' – user20650

+1

@db that do the trick .. 感謝那!我過於專注於單獨使用剪輯,因此我忽略了那樣簡單的事情。 –

回答

3

既然你想左間隔邊界關閉,想要一個整數,然後findInterval(而不是cut)是自然的選擇:

data.frame(data = numbers, bins = 6L - findInterval(numbers, vec = cutoffs)) 
    data bins 
1  1 5 
2  2 4 
3  3 4 
4  4 4 
5  5 4 
6  6 3 
7  7 2 
8  8 2 
9  9 2 
10 10 1 
> 
+0

謝謝,你的答案也有竅門。正是我需要的! –

+1

如果你想使它成爲程序化的,你可以用max()表達式替換'6L'。 –

4

更改通過否定dataframes和設定的權= TRUE值,從而使間隔變(-INF,0]。

期望的結果是取得的參數傳遞給切割()函數。

data.frame(data = numbers, bins = as.integer(cut(-numbers, breaks = -cutoffs, right = TRUE))) 
+0

太好了,謝謝。我接受了另一個,因爲對我來說讀起來更容易一些(因爲我們在這裏使用雙重否定)。 –