как разбить числа в интервале - PullRequest
0 голосов
/ 14 января 2020

Я пытаюсь сократить кредитные баллы до диапазонов, чтобы присвоить их рейтинг.

Я пробовал это:

x <- sample(510:780, 50, replace=TRUE)
cut(x, breaks=c(300, 579, 669, 739, 799), include.lowest=TRUE)

результат:

[300,579] (579,669] (669,739] (739,799]

но я хочу что-то вроде:

(300, 579] (580, 669] (670, 739] (740,799] (739,799]

что-то вроде диапазонов здесь : https://www.experian.com/blogs/ask-experian/credit-education/score-basics/what-is-a-good-credit-score/

Ответы [ 2 ]

2 голосов
/ 14 января 2020

Может быть, вы можете попробовать код ниже:

bks <- c(300, 579, 669, 739, 799)
bks <- sort(c(bks, bks[-c(1,length(bks))]+1))
r <- cut(x, breaks= bks, include.lowest=F)
f <- levels(r)[-seq(2,length(levels(r)),by = 2)]
r <- factor(r[r %in% f])

Так, что вы получите:

> levels(r)
[1] "(300,579]" "(580,669]" "(670,739]" "(740,799]"
0 голосов
/ 14 января 2020

Я не думаю, что вам нужно то, что вы показываете здесь. В зависимости от того, в какую группу должны входить данные с интервалами, вы можете использовать findInterval или cut, например:

findInterval(579, c(300, 579, 669, 739, 799), left.open = TRUE) 
#[1] 1

findInterval(579, c(300, 579, 669, 739, 799))
#[1] 2

С cut

cut(579, c(300, 579, 669, 739, 799))
#[1] (300,579]
#Levels: (300,579] (579,669] (669,739] (739,799]

cut(579, c(300, 579, 669, 739, 799), right = FALSE)
#[1] [579,669)
#Levels: [300,579) [579,669) [669,739) [739,799)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...