R语言中如何仅删除指定8列含NA的行并保留全部列
解决方案
你的问题核心是只基于指定8列的NA值过滤行,但保留全部24列变量,原来的代码先筛选列再删NA,导致丢失其他列。可以用complete.cases()函数针对目标列做判断,再筛选整个数据集:
修改后的代码:
# 读入原始数据(这部分不变) injury.data <- read.csv("C:/Users/jacob/Downloads/hwk3data.csv", stringsAsFactors = TRUE) # 定义需要检查NA的列索引 target_cols <- c(7, 13:16, 22:24) # 仅保留目标列无NA的行,同时保留所有24列 injury.data <- injury.data[complete.cases(injury.data[, target_cols]), ]
代码说明
complete.cases(injury.data[, target_cols])会生成一个布尔向量,对应每一行:如果目标列全为非NA则返回TRUE,否则FALSE- 用这个向量筛选数据集
injury.data[布尔向量, ],就能保留所有列,同时删掉目标列存在NA的行
如果你习惯用dplyr包(tidyverse生态),也可以这样写:
library(dplyr) injury.data <- read.csv("C:/Users/jacob/Downloads/hwk3data.csv", stringsAsFactors = TRUE) %>% filter(across(c(7, 13:16, 22:24), ~!is.na(.x)))
across()函数可以批量指定列,~!is.na(.x)表示检查每列是否无NA,filter()会保留满足条件的行。
内容的提问来源于stack exchange,提问作者Jacob Marks
相关产品推荐
相关产品推荐

