如何将R语言dataframe指定子集的数值修改为NA?
原赋值写法不生效的核心原因是virginica_widths是从原数据集筛选出的独立子数据框,不是原数据集的行列位置索引,无法直接用作下标定位原数据的对应单元格。
方案1:基础R实现
先定位目标行、目标列的索引,再对对应位置批量赋值:
# 定位目标行:Species为virginica的行 target_rows <- iris$Species == "virginica" # 定位目标列:列名包含Width的列 target_cols <- grep("Width", colnames(iris), value = TRUE) # 对应区域赋值为NaN iris[target_rows, target_cols] <- NaN
方案2:dplyr::mutate 实现
用mutate()搭配across()即可实现按行条件批量修改指定列的数值,不需要提前提取子集:
library(dplyr) iris <- iris %>% mutate( # 选中所有列名含Width的列 across(contains("Width"), # 仅将Species为virginica的行替换为NaN,其余行保留原值 ~ ifelse(Species == "virginica", NaN, .x)) )
两种方案最终效果完全一致,按需选择即可。
内容的提问来源于stack exchange,提问作者Nate
相关产品推荐
相关产品推荐

