R中如何不创建新数据集即可删除某变量含NA的对应行
解决方案
该操作完全可以实现,你只需要将筛选后的结果直接赋值回原数据集变量名即可,无需新建独立的子集对象。
基础R实现方法
核心代码如下:data <- data[!is.na(data$emp_length), ]
逻辑说明:
is.na(data$emp_length)会生成和数据集行数长度一致的布尔向量,标记emp_length列的NA位置- 前置
!对布尔向量取反,筛选出emp_length不为NA的行 - 索引中逗号后留空,代表保留数据集所有列
- 直接赋值回原变量名
data,完成原位修改,不会额外生成新数据集
对应你的示例场景的测试代码:
# 构造示例原数据 data <- data.frame( Title = c("A", "B", "C"), Length = c(NA, 2, 7) ) # 执行原位删除Length列含NA的行 data <- data[!is.na(data$Length), ]
执行后原data就会得到你期望的输出结果。
如果你使用tidyverse生态
可以用drop_na()指定要过滤NA的列,同样直接赋值回原数据集即可:
library(dplyr) data <- data %>% drop_na(emp_length)
原代码问题说明
你之前的写法completerecords <- na.omit(data$emp_length)之所以生成新数据集,是因为你将结果赋值给了新变量completerecords,且仅提取了单列值,只要把筛选后的完整数据集赋值回原变量名,就可以实现不新建子集的修改需求。
内容的提问来源于stack exchange,提问作者Dani
相关产品推荐
相关产品推荐

