如何在R语言中按ID分组与指定规则生成Bin和Zero列
给R数据框新增Bin和Zero列的实现方法
原始数据
A="01-03" B="04-06" C="07-09" D="10-11" data <- read.table(text = " ID Class Time1 Time2 Time3 1 1 1 3 3 2 1 4 3 2 3 1 2 2 2 1 2 1 4 1 2 3 2 1 1 3 2 3 2 3 1 3 1 1 2 2 2 4 3 1 3 3 3 2 1 1 1 4 3 2 2 1 2 2 2 3 2 1 4 1 ", header = TRUE)
需求说明
- 在
Class列后新增两列:Bin和ZeroBin列:按数据行分组匹配区间,前3行对应01-03,接下来3行对应04-06,再接下来3行对应07-09,最后3行对应10-11Zero列:所有值固定为0
解决方案
方法1:Base R实现
# 定义Bin的区间标签 bin_labels <- c("01-03", "04-06", "07-09", "10-11") # 新增Bin列,按每组3行重复标签 data$Bin <- rep(bin_labels, each = 3) # 新增Zero列,值全为0 data$Zero <- 0 # 调整列顺序,将Bin和Zero移至Class之后 data <- data[, c("ID", "Class", "Bin", "Zero", "Time1", "Time2", "Time3")]
方法2:dplyr包实现
如果习惯tidyverse风格,可用dplyr处理:
library(dplyr) bin_labels <- c("01-03", "04-06", "07-09", "10-11") data <- data %>% mutate(Bin = rep(bin_labels, each = 3), Zero = 0) %>% select(ID, Class, Bin, Zero, everything())
处理后结果
运行上述代码后,数据框内容如下:
ID Class Bin Zero Time1 Time2 Time3 1 1 01-03 0 1 3 3 2 1 01-03 0 4 3 2 3 1 01-03 0 2 2 2 1 2 04-06 0 1 4 1 2 3 04-06 0 2 1 1 3 2 04-06 0 3 2 3 1 3 07-09 0 1 1 2 2 2 07-09 0 4 3 1 3 3 07-09 0 3 2 1 1 1 10-11 0 4 3 2 2 1 10-11 0 2 2 2 3 2 10-11 0 1 4 1
内容的提问来源于stack exchange,提问作者user330
相关产品推荐
相关产品推荐

