R: Assign values by interval using vectorisation

后端 未结 2 1476
自闭症患者
自闭症患者 2021-01-26 10:15

Let\'s have a numeric vector:

a <- round(runif(20, 1, 5), 0)
[1] 3 5 4 2 1 2 3 4 5 2

I need to assign values to these numbers using table li

相关标签:
2条回答
  • 2021-01-26 10:32

    Define a Minimum Value and Maximum Value for the variable you want assign classes, and how many classes you want, the class will be defined by splitting the range of your variable in intervals of equal length:

    minValue <- 1
    maxValue <- 5
    numClasses <- 3
    

    Define the breaks, this defines the start and end point of each interval:

    breaks <- seq(minValue, maxValue, length.out = numClasses+1)
    #[1] 1.000000 2.333333 3.666667 5.000000
    

    Then cut your numeric vector using the function cut(), use integer labels. Use the argument include.lowest=TRUE so that the minimum value falls in the first interval:

    set.seed(1)
    a <- round(runif(20, 1, 5), 0)
    #[1] 2 2 3 5 2 5 5 4 4 1 2 2 4 3 4 3 4 5 3 4
    labels = seq(1, length(breaks)-1) #integer labels
    classes <- cut(a, breaks=breaks, labels=labels, include.lowest = TRUE)
    #[1] 1 1 2 3 1 3 3 3 3 1 1 1 3 2 3 2 3 3 2 3
    

    If you want labels to be letters use the following line instead:

    labels = LETTERS[1:(length(breaks)-1)]
    classes <- cut(a, breaks=breaks, labels=labels, include.lowest = TRUE)
    #[1] A A B C A C C C C A A A C B C B C C B C
    

    However this limits you to 26 classes.

    0 讨论(0)
  • 2021-01-26 10:46
    a <-  c(3, 5, 4, 2, 1, 2, 3, 4, 5, 2)
    cut(a, breaks=c(0.5, 2.5, 4.5, 10), labels=c("A", "B", "C"))
    
    0 讨论(0)
提交回复
热议问题