如何在R语言中对数据框的两列同时分箱生成统一分箱列?
同时对数据框两列分箱并生成统一分箱列的解决方案
基础R实现方式
先通过cut()函数分别给x、y列按你定义的分箱区间做分箱,再用interaction()把两个分箱结果合并成一个统一的分箱列,代码如下:
x <- sample(100) y <- sample(100) data <- data.frame(x, y) xbin <- seq(from = 0, to = 100, by = 10) ybin <- seq(from = 0, to = 100, by = 10) # 给x、y各自分箱,include.lowest确保最小值被包含进第一个分箱 data$x_bin <- cut(data$x, breaks = xbin, include.lowest = TRUE) data$y_bin <- cut(data$y, breaks = ybin, include.lowest = TRUE) # 合并两个分箱列,生成唯一的组合分箱标识 data$combined_bin <- interaction(data$x_bin, data$y_bin, sep = "-")
tidyverse(dplyr)实现方式
如果平时用tidyverse这套工具链,用mutate()可以更简洁地完成操作:
library(dplyr) x <- sample(100) y <- sample(100) data <- data.frame(x, y) xbin <- seq(from = 0, to = 100, by = 10) ybin <- seq(from = 0, to = 100, by = 10) data <- data %>% mutate( x_bin = cut(x, breaks = xbin, include.lowest = TRUE), y_bin = cut(y, breaks = ybin, include.lowest = TRUE), # 用paste把两个分箱标签连起来,生成统一分箱列 combined_bin = paste(x_bin, y_bin, sep = "-") )
要是不需要保留单独的x_bin和y_bin列,还能一步到位:
data <- data %>% mutate(combined_bin = paste( cut(x, breaks = xbin, include.lowest = TRUE), cut(y, breaks = ybin, include.lowest = TRUE), sep = "-" ))
内容的提问来源于stack exchange,提问作者Harsh Krishna
相关产品推荐
相关产品推荐

