我需要将部分值分配到不同的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)
但是,随着垃圾箱数量的增加,这个过程变得越来越复杂。有没有更有效的方法来解决这个问题?