R语言如何删除1860-1863年有缺失值的城市行并保留后续年份数据
解决思路
你之前的代码仅提取了1860-1863年的列做缺失值过滤,自然会丢失其他列的数据。正确逻辑是:仅对1860-1863年的列做缺失值校验,用校验结果筛选原数据的整行即可保留所有列。
实现方法
方法1:基础R实现
用complete.cases()对指定列做缺失值校验,筛选对应行:
# 定义需要校验缺失值的列,用列名匹配比硬写列序号更稳妥,避免后续列顺序变化出错 check_cols <- c("cost1860", "cost1861", "cost1862", "cost1863") # 筛选出校验列无缺失的行,保留所有列 mydata_clean <- mydata[complete.cases(mydata[, check_cols]), ]
如果确认列顺序不会变,也可以直接写列序号check_cols <- 2:5,效果一致。
方法2:dplyr实现(可读性更高)
如果你习惯用tidyverse生态,可以用filter+across组合实现:
library(dplyr) mydata_clean <- mydata %>% # 仅校验1860-1863年的列,存在任意NA的行直接过滤,其他列全部保留 filter(across(cost1860:cost1863, ~!is.na(.x)))
效果说明
按你的示例数据运行后,最终会保留洛杉矶、芝加哥两个城市的全量数据,包含1864年及之后的所有字段,后续年份的NA不会被过滤,完全符合你的需求。
内容的提问来源于stack exchange,提问作者B.Nin
相关产品推荐
相关产品推荐

