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

在R语言中如何将数据框某列的NA替换为同行另一列的对应字符串

假设你的数据框在R中名为df,或者在Python中名为df,以下是两种常用工具的实现方法:

R 实现(使用dplyr包)

先构造你的示例数据框:

df <- data.frame(
  sample = c("s1", "s2", "s3", "s4", "s5"),
  tissue = c("brain", "skin", "liver", "kidney", "nerve"),
  disease = c("glioblastoma", "melanoma", NA, "carcinoma", NA),
  stringsAsFactors = FALSE
)

用ifelse快速完成替换:

library(dplyr)

df <- df %>%
  mutate(disease = ifelse(is.na(disease), paste(tissue, "normal"), disease))

如果需要更清晰的多条件逻辑,也可以用case_when:

df <- df %>%
  mutate(disease = case_when(
    is.na(disease) ~ paste(tissue, "normal"),
    TRUE ~ disease
  ))

Python 实现(使用pandas库)

先构造示例数据框:

import pandas as pd

df = pd.DataFrame({
  "sample": ["s1", "s2", "s3", "s4", "s5"],
  "tissue": ["brain", "skin", "liver", "kidney", "nerve"],
  "disease": ["glioblastoma", "melanoma", None, "carcinoma", None]
})

方法1:使用np.where批量处理

import numpy as np

df['disease'] = np.where(df['disease'].isna(), df['tissue'] + ' normal', df['disease'])

方法2:使用apply逐行判断

df['disease'] = df.apply(
  lambda row: f"{row['tissue']} normal" if pd.isna(row['disease']) else row['disease'],
  axis=1
)

处理后的数据框结果如下:

sampletissuedisease
s1brainglioblastoma
s2skinmelanoma
s3liverliver normal
s4kidneycarcinoma
s5nervenerve normal

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 03:36:21