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

在R语言中通过Key列拆分值填充数据框中的NA值

这里有两种可行的方法来实现你的需求,一种是使用tidyverse工具包(代码更简洁直观),另一种是纯Base R的方案,你可以根据自己的习惯选择:

方法1:使用tidyr的separate_wider_delim(推荐)

这个函数可以直接按指定分隔符拆分列,并且自动匹配到目标列,非常适合你的场景:

# 如果未安装tidyverse包,先执行 install.packages("tidyverse")
library(tidyverse)

# 拆分Key列并填充对应字段
Linking <- Linking %>%
  separate_wider_delim(
    cols = Key,
    delim = "_",
    names = c("ID", "PSU", "qtr"),
    cols_remove = FALSE,  # 保留Key列,不需要的话可设为TRUE
    fill = "right"
  ) %>%
  # 转换数据类型,和原始数据保持一致
  mutate(
    ID = as.integer(ID),
    qtr = as.integer(qtr)
  )

执行后,原数据中21-24行的ID、PSU、qtr字段会被Key拆分出的值自动填充,且数据类型和其他行保持统一。

方法2:纯Base R方案

如果你不想加载额外的包,可以用Base R原生函数完成:

# 定位需要填充的行(ID为NA的行)
target_rows <- which(is.na(Linking$ID))

# 拆分目标行的Key字段
split_result <- strsplit(Linking$Key[target_rows], "_")

# 分别赋值到对应列
Linking$ID[target_rows] <- sapply(split_result, function(x) as.integer(x[1]))
Linking$PSU[target_rows] <- sapply(split_result, function(x) x[2])
Linking$qtr[target_rows] <- sapply(split_result, function(x) as.integer(x[3]))

这个逻辑是先找到需要填充的行,再拆分Key字段提取对应位置的值,最后转换类型后赋值到目标列。

你可以用print(Linking[21:24, ])来验证填充结果是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:05:05