我目前正在努力削减...我不知道是否还有其他功能。
我有一个带有值的大表和一个带阈值的矩阵或向量。
假设我有一个包含阈值0.6,0.8,1.0,1.2,1.4的矩阵 我想找出一个值(即0.9),该值在哪个扇区下降。基本上它是一个“评级”系统。值< = 0.6得到5,< = 0.8> 0.6得到4等等所以我想只将这个值(5,4,3等)写入结果表中。
好的,这是我到目前为止的代码:
cut(1.2, breaks=c(0.6,0.8,1.0,1.2,1.4), labels(5,4,3,2,1))
但这还行不通..标签我实际上不知道有多少我必须插入那里因为我总是得到一个错误,矢量的长度是不同的。如果没有标签参数,我仍然无法使其正常工作。它仍然输出所有不同的段,而不仅仅是我猜的那个值......
答案 0 :(得分:7)
cut
应该是正确的功能,但你做错了。
首先,代码中存在拼写错误。 labels = c(...)
将是正确的版本。
其次,考虑一下你在做什么:创造间隔。多少?如果没有cut
,请尝试labels
:
cut(1.2, breaks=c(0.6,0.8,1.0,1.2,1.4))
# [1] (1,1.2]
# Levels: (0.6,0.8] (0.8,1] (1,1.2] (1.2,1.4]
只有4级创建,所以你只需要提供4个标签(或重新定义你的断点)。
答案 1 :(得分:2)
我认为您正在寻找findInterval
:
breaks <- c(0.6,0.8,1.0,1.2,1.4)
val <- c(0.7,1.1,1.35)
findInterval(val, breaks)
## [1] 1 3 4
如果您想要结果标签,可以使用因子:
labels <- factor(5:1)
labels[findInterval(val,breaks)]
## [1] 5 3 2
## Levels: 1 2 3 4 5
答案 2 :(得分:2)
findInterval
非常适合
x <- c(0.6, 0.8, 1.0, 1.2, 1.4)
> findInterval(0.9, x)
[1] 2
这意味着您的值0.9
位于第二个区间,即0.8
和1.0
之间。请查看?findInterval
了解更多详情。
答案 3 :(得分:0)
问题是,并且任何值&lt; = 0.6应该获得最佳成绩和任何值&gt; 1.4应该是最糟糕的。使用findInterval它总是&gt; =所以我没有成功。但是在你的帮助下我得到了这样的工作:
cut(1.2, breaks=c(0,0.6,0.8,1.0,1.2,1.4,100),labels=c(6,5,4,3,2,1))