在R语言中为数据框多列的唯一组合创建对应索引的方法
方法1:基础R实现
不需要加载任何第三方包,直接用内置函数即可实现:
# 生成唯一组合的索引,按组合首次出现的顺序分配编号 unique_comb <- unique(df[, c("A", "B", "D")]) df$index <- match( paste(df$A, df$B, df$D, sep = "_"), paste(unique_comb$A, unique_comb$B, unique_comb$D, sep = "_") )
也可以用更简洁的interaction函数实现:
df$index <- as.integer(interaction(df$A, df$B, df$D, lex.order = TRUE))
方法2:dplyr实现(逻辑更直观)
如果你常用tidyverse生态的工具,用分组加组ID的方式可读性更高:
library(dplyr) df <- df %>% group_by(A, B, D) %>% mutate(index = cur_group_id()) %>% ungroup()
两种方法输出的结果和你给出的预期效果完全一致,相同的A/B/D组合会被分配相同的索引值,索引编号按照组合第一次出现的顺序依次递增。
内容的提问来源于stack exchange,提问作者Vinicius B. de S. Moreira
相关产品推荐
相关产品推荐

