如何在R语言中基于特定模式的已有列生成索引列?
解决方案
你的需求是基于set列的"set"标记生成递增的序列列,仅在"set"位置显示数字,其余位置保留空字符串。以下是几种实用实现方式:
方法1:Base R 实现
先通过cumsum计算"set"的累积出现次数,再将非"set"位置替换为空字符串:
# 修正原数据框的列名定义(原代码的<-会导致列名异常) df <- data.frame(set = c("","","","","","set","","","","","set","","","","","set")) # 生成序列列 df$set_seq <- cumsum(df$set == "set") # 将非"set"位置转为空字符串 df$set_seq[df$set != "set"] <- ""
方法2:dplyr 实现
用case_when结合累积和,直接生成符合要求的字符型列:
library(dplyr) df <- df %>% mutate( set_seq = case_when( set == "set" ~ as.character(cumsum(set == "set")), TRUE ~ "" ) )
方法3:data.table 实现
针对你尝试过的data.table,补充空字符串替换的步骤即可:
library(data.table) setDT(df) # 先计算累积和并转为字符型,再替换非"set"位置 df[, set_seq := as.character(cumsum(set == "set"))] df[set != "set", set_seq := ""]
关键说明
直接用cumsum得到的是数值型向量,非"set"位置会保留累积数值而非空字符串,因此需要额外将这些位置替换为空;同时要把累积和转为字符型,保证和空字符串的类型统一。
内容的提问来源于stack exchange,提问作者cd21
相关产品推荐
相关产品推荐

