在R中为DataFrame特定行的NGR字符串插入字符(偏好Tidyverse)
解决方案(Tidyverse风格)
针对批量处理Buffer=500行NGR字符串的需求,用dplyr配合自定义函数即可实现,具体步骤如下:
1. 加载Tidyverse包
library(tidyverse)
2. 定义字符串处理函数
针对ABXXXX格式的NGR字符串,封装你需要的插入逻辑:
方法一:Stringr风格(更直观的Tidyverse写法)
process_ngr <- function(ngr) { # 拆分原字符串,插入指定字符后拼接 str_c(str_sub(ngr, 1, 4), "5", str_sub(ngr, 5, 6), "5") }
方法二:沿用你原有的Regmatches逻辑
process_ngr <- function(ngr) { n <- 5 n2 <- 8 regmatches(ngr, `attr<-`(n, "match.length", 0)) <- "5" regmatches(ngr, `attr<-`(n2, "match.length", 0)) <- "5" ngr }
3. 批量处理DataFrame
用case_when精准筛选目标行,批量应用处理函数:
df_processed <- df %>% mutate(NGR = case_when( Buffer == 500 ~ process_ngr(NGR), TRUE ~ NGR # 非目标行保持原NGR不变 )) # 查看处理结果 df_processed
结果验证
处理后的DataFrame中,仅Buffer=500的行(如原NGRSD9501)会被修改为SD955015,其余行的NGR和其他列完全保留。
内容的提问来源于stack exchange,提问作者Sarah
相关产品推荐
相关产品推荐

