You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言:将wk#列NA值替换为前一列字符串首字符

问题说明

现有一列数据标签为1.2.a.2021格式的字符串,需要将当前填充为NA的wk#列对应行值,替换为对应字符串的首个数字(示例取值为1)。已尝试使用strsplit()函数拆分字符串为字符元素、或转换为数值类型,需要实现逐行提取第一列字符串首段数字,填充到wk#列对应位置。数据集覆盖13个周、共数百条数据点,示例数据结构如下:

samplengwk#
1.2.a.20210.4NA
实现方案

按需求编写的for循环版本

假设数据框对象名为df,逐行循环填充代码如下:

# 逐行遍历数据
for (row_idx in 1:nrow(df)) {
  # 按.分隔符拆分sample列字符串,注意.需要正则转义
  str_parts <- strsplit(df$sample[row_idx], split = "\\.")[[1]]
  # 取拆分后第一个元素,转为数值后赋值给wk#列对应位置
  df$`wk#`[row_idx] <- as.numeric(str_parts[1])
}

注意事项:

  • .是正则表达式通配符,直接写会匹配所有字符,必须加双反斜杠转义为\\.才能正确按点号拆分
  • 填充前确认wk#列的类型支持数值存储,避免类型不兼容报错

更高效的向量化实现(推荐)

R语言中向量化操作运行效率远高于逐行for循环,代码也更简洁,适合几百到十万级数据量处理,两种常用写法:

# 写法1:基础R实现,不用额外装包
df$`wk#` <- as.numeric(sapply(strsplit(df$sample, "\\."), `[`, 1))

# 写法2:用stringr包直接提取开头数字,逻辑更直观
# 首次使用需先安装:install.packages("stringr")
library(stringr)
df$`wk#` <- as.numeric(str_extract(df$sample, "^\\d"))

运行后示例输出结果:

samplengwk#
1.2.a.20210.41

内容的提问来源于stack exchange,提问作者Lheg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 06:36:26