为配对数据分配特殊分组编号,指定组合专属编号需求
为特定数据组合分配专属分组编号
咱们先把需求拆解清楚:
- 对于数据里的配对组(比如
c("bad","good")这类成对出现的元素),要给它们分配同一个编号,这个编号会持续到下一组新的配对出现时才更换 - 另外要给指定的特殊组合
c('Veni',"vidi","Vici")分配专属的固定编号666
示例数据
假设咱们有这样的输入数据(以R语言向量为例):
input_data <- c("bad", "good", "bad", "good", "Veni", "vidi", "Vici", "bad", "good", "foo", "bar")
预期输出
对应的分组编号应该是:
[1] 1 1 1 1 666 666 666 2 2 3 3
简单解释下逻辑:
- 前两对
"bad","good"属于同一组,共用编号1 - 中间的
"Veni","vidi","Vici"是特殊组合,全部标记为666 - 后面的
"bad","good"是新的独立组,分配编号2 - 最后的
"foo","bar"是新配对,分配编号3
实现方案(R语言)
这里用base R结合条件判断来实现,逻辑清晰易懂,适配多数场景:
assign_group_ids <- function(data) { # 初始化变量 group_id <- 1 result <- numeric(length(data)) i <- 1 while(i <= length(data)) { # 优先检查是否匹配特殊组合 if (i + 2 <= length(data) && all(data[i:(i+2)] == c('Veni',"vidi","Vici"))) { result[i:(i+2)] <- 666 i <- i + 3 } else if (i + 1 <= length(data)) { # 处理普通配对组 current_pair <- data[i:(i+1)] result[i:(i+1)] <- group_id # 检查后续是否有重复的相同配对,持续用当前编号 while(i + 2 <= length(data) && all(data[(i+1):(i+2)] == current_pair)) { result[(i+2)] <- group_id i <- i + 1 } group_id <- group_id + 1 i <- i + 2 } else { # 处理单个剩余元素(如果存在) result[i] <- group_id i <- i + 1 } } return(result) } # 测试函数 input_data <- c("bad", "good", "bad", "good", "Veni", "vidi", "Vici", "bad", "good", "foo", "bar") assign_group_ids(input_data)
运行这段代码就能得到咱们想要的分组编号啦!如果你的数据是数据框格式,只需要稍作调整,把逻辑应用到目标列上即可。
内容的提问来源于stack exchange,提问作者Alexander
相关产品推荐
相关产品推荐

