2017-06-21 46 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

太好了,谢谢。我接受了另一个,因为对我来说读起来更容易一些(因为我们在这里使用双重否定)。 –