在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 )
处理后的数据框结果如下:
| sample | tissue | disease |
|---|---|---|
| s1 | brain | glioblastoma |
| s2 | skin | melanoma |
| s3 | liver | liver normal |
| s4 | kidney | carcinoma |
| s5 | nerve | nerve normal |
内容的提问来源于stack exchange,提问作者avery
相关产品推荐
相关产品推荐

