动态将价值分配到垃圾箱的更好方法

时间:2019-07-11 15:59:55

标签: r

我需要将部分值分配到不同的bin中。例如,如果我们有一个向量1:5和两个容器,其中bin1的宽度为3,则所需的输出将是:

 value bin1_value bin_2value
     1          1          0
     2          2          0
     3          3          0
     4          3          1
     5          3          2

其中bin1捕获值的前3个单位(如果有那么多),而bin2捕获值的其余3个单位。 我需要能够更改垃圾箱的数量和宽度,所以我编写了此功能:

Fxn <- function(bin_number, value, width1, width2 = NULL) {

  max1 <- width1
  min2 <- max1 + 1
  max2 <- max1 + width2

  # Calculate 
  bin1_value <- if (bin_number == 1) value else 
    ifelse(value < max1, value, max1)

  bin2_value <- if (bin_number == 2) 
    ifelse(value >= min2, value - max1, 0)

  # Return based on number of bins
  return(if (bin_number == 1) bin1_value else
    c(bin1_value, bin2_value))

}

该功能有效,我可以使用以下方式将bin值分配给相关列:

cols <- c("bin1", "bin2")
df <- data.frame(value = 1:10)

df[cols] <- Fxn(2, df$value, width1 = 5,  width2 = 15)

但是,随着垃圾箱数量的增加,这个过程变得越来越复杂。有没有更有效的方法来解决这个问题?

0 个答案:

没有答案