2

我目前正在努力削减......我不知道是否还有其他功能。

我有一个带有值的大表和一个带有阈值的矩阵或向量。

假设我有一个包含阈值 0.6、0.8、1.0、1.2、1.4 的矩阵,我想找出该值落在哪个扇区的值(即 0.9)。基本上它是一个“分级”系统。A Value <= 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))

但这还行不通。我实际上不知道我必须在那里插入多少标签,因为我总是得到一个错误,即向量的长度不同。如果没有标签参数,我仍然无法正常工作。它仍然输出所有不同的段,而不仅仅是我猜的那个值......

4

4 回答 4

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 个标签(或重新定义断点)。

于 2013-10-07T11:29:24.553 回答
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

如果你想要结果的标签,你可以使用一个 factor :

labels <- factor(5:1)
labels[findInterval(val,breaks)]
##  [1] 5 3 2
##  Levels: 1 2 3 4 5
于 2013-10-07T11:30:00.940 回答
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更多详细信息。

于 2013-10-07T11:30:17.633 回答
0

非常抱歉,对于 R 来说还是新手,学习曲线确实非常高。

问题是,任何 <= 0.6 的值都应该得到最好的成绩,而任何 > 1.4 的值都应该得到最差的成绩。使用 findInterval 它总是 >= 所以我没有成功。但在你的帮助下,我得到了这样的工作:

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))
于 2013-10-07T11:39:24.150 回答