我对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写了一个警告说某些数字没有被使用或没有使它正确(例如只使用第一个数字)
任何人都知道如何把它写得聪明而简短?
最好的问候 丹尼尔答案 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