哪个函数适用于多个值R

时间:2018-03-09 13:24:35

标签: r classification which

我对r。

中的which()函数有疑问

得到一个具有不同值的数字向量[1:349]。但我想对它们进行分类,因此只有4个值。 我的想法如下:

KlasFehl <- GP$Fehlstunden #the numeric vector

KFehl30 <- which(KlasFehl == 1|
             KlasFehl == 2|
             KlasFehl == 3|
             KlasFehl == 4|
             .
             .
             .
             KlasFehl == 30)

KlasFehl[KFehl30] <- 30

并且对于名为0的值0,对于名为60的值30到60以及名为90的值60到90,对于Class是相同的。 那是很多工作,所以我尝试了它,更聪明,#34;。

 KFehl30 <- which(KlasFehl == 1|2|3|4|5...|30)

 KFehl30 <- which(KlasFehl == (1:30))

但是r写了一个警告说某些数字没有被使用或没有使它正确(例如只使用第一个数字)

任何人都知道如何把它写得聪明而简短?

最好的问候 丹尼尔

2 个答案:

答案 0 :(得分:2)

我认为你需要的不是分类,而是Binning。您可以使用函数cut来完成此任务。为了测试它,我使用数字0到90,以便您可以看到它为每种可能性生成正确的类。请注意,因为我从0开始,0位于位置1,1位于位置2,等等

KlasFehl = 0:90
KlasFehl = cut(KlasFehl, breaks=c(-1,0,30,60,91), labels=c(0,30,60,90))
KlasFehl
 [1] 0  30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
[26] 30 30 30 30 30 30 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60
[51] 60 60 60 60 60 60 60 60 60 60 60 90 90 90 90 90 90 90 90 90 90 90 90 90 90
[76] 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
Levels: 0 30 60 90

答案 1 :(得分:1)

which函数只给出了布尔向量的TRUE元素的索引。它很少需要并且经常被过度使用。

如果向量中的值采用多个不同值中的任何一个,那么您似乎遇到的问题是生成带有TRUE元素的布尔值。一个解决方案是%in%运算符:

KFehl30 <- KlasFehl %in% (1:30)

您当然可以使用TRUE将此布尔值转换为which元素的索引号,但您(或大多数)应用程序不需要这样做。

KlasFehl[KFehl30] <- 30

会正常工作。

另一种解决方案是使用<==>生成布尔矢量:

KFehl30 <- KlasFehl >= 1 & KlasFehl <= 30