R中按分组层级筛选行:选取指定年份并保留含NA值行的方法
错误原因
你使用的==是逐元素比对运算符,仅适用于两个比对向量长度一致、或短向量长度是长向量整数倍的场景。你的需求是判断year列的值是否属于指定的三个年份的集合,逐元素比对完全不符合需求,因此出现长度不匹配的警告,最终筛选结果也会出错。
修正方案
基础R写法
直接将==替换为R专用的多值匹配运算符%in%即可:
mini_data <- all_data[all_data$year %in% c('2006','2019','2020'), ]
该方案仅通过year列的取值判断是否保留行,不会过滤其他列含NA的行,完全满足你保留NA值行的需求。用你提供的示例数据运行后,会保留第1、2、5、6行(含2006年Tt为NA的行)。
dplyr写法(可选)
如果你习惯使用tidyverse系列工具,也可以用filter()函数实现:
library(dplyr) mini_data <- all_data %>% filter(year %in% c('2006','2019','2020'))
内容的提问来源于stack exchange,提问作者Nate
相关产品推荐
相关产品推荐

