如何将字符向量中的"COMPARTMENT_START"替换为xy(y取自DataFrame采样值)
嘿,我来帮你搞定这个替换需求!你需要把文本向量里的COMPARTMENT_START短语替换成x加上从DataFrame中采样的数字,下面是具体的实现步骤和代码:
1. 整理输入数据
首先先把你提供的输入结构修正成可直接在R中运行的DataFrame(原输入里有一些格式小问题,我已经调整好了):
# 整理后的输入数据 report_data <- structure( list(report = c( "COMPARTMENT_START duod biospies taken WritePathReport NUMBER OF BIOPSIES: biopsied x8 COMPARTMENT_END", "COMPARTMENT_START duod biospies taken", "COMPARTMENT_START oesophagus biospies taken WritePathReport NUMBER OF BIOPSIES: character(0) COMPARTMENT_END", "COMPARTMENT_START duod biospies taken", "COMPARTMENT_START duod bi..." )), class = "data.frame" )
2. 准备采样用的DataFrame
假设你已经有一个包含数字列的DataFrame,这里先创建一个示例(你可以替换成你实际的DataFrame):
# 示例:包含可采样数字的DataFrame sample_df <- data.frame(available_numbers = 1:20)
3. 执行采样与替换
我们可以用stringr包的str_replace函数(或者base R的gsub)来完成替换,同时为每个文本条目匹配一个采样得到的数字:
# 加载stringr包(如果没安装先运行install.packages("stringr")) library(stringr) # 采样:为每个report条目获取一个数字,replace=TRUE允许重复采样 sampled_numbers <- sample(sample_df$available_numbers, nrow(report_data), replace = TRUE) # 批量替换:将每个文本中的COMPARTMENT_START替换为x+采样数字 report_data$modified_report <- mapply( function(text, num) str_replace(text, "COMPARTMENT_START", paste0("x", num)), report_data$report, sampled_numbers ) # 查看结果 print(report_data$modified_report)
如果不想依赖stringr,用base R也能实现:
# base R版本的替换 report_data$modified_report_base <- mapply( function(text, num) gsub("COMPARTMENT_START", paste0("x", num), text), report_data$report, sampled_numbers )
小提示
- 如果需要不重复采样,把
sample()函数里的replace=TRUE改成replace=FALSE,但要确保你的采样DataFrame里的数字数量≥report条目的数量哦。 - 如果你的采样DataFrame需要先筛选特定范围的数字,可以先做过滤,比如
sample_df %>% filter(available_numbers > 5)再采样。
内容的提问来源于stack exchange,提问作者Sebastian Zeki
相关产品推荐
相关产品推荐

