基于另一列值生成编号列的R语言实现求助
解决方法
方法一:Base R 原生实现
无需额外安装包,直接通过因子转换生成符合要求的编号:
# 生成Index列 df$Index <- as.integer(factor(df$layer1_name, levels = unique(df$layer1_name))) # 查看结果 df
运行后输出与期望完全一致:
layer0_name layer1_name Index 1 1_10177_A_AC DDX11L1 1 2 1_14599_T_A WASH7P 2 3 1_15903_G_GC WASH7P 2 4 1_54712_TTTTC_T OR4F5 3 5 1_54716_C_T OR4F5 3
原理:unique(df$layer1_name)按值的出现顺序提取唯一值作为因子水平,转换为整数后自动生成从1开始的连续编号,相同layer1_name对应同一编号。
方法二:dplyr 实现
如果习惯使用tidyverse生态,可通过dplyr的分组函数实现:
library(dplyr) # 写法1:使用group_indices df <- df %>% mutate(Index = group_indices(., layer1_name)) # 写法2:使用cur_group_id(需dplyr 1.0.0及以上版本) df <- df %>% group_by(layer1_name) %>% mutate(Index = cur_group_id()) %>% ungroup()
两种写法均能按layer1_name分组分配连续编号,达到需求效果。
内容的提问来源于stack exchange,提问作者VasoGene
相关产品推荐
相关产品推荐

