如何在R中删除tibble中CSO=1且DateStartRole为NA的行?
正确删除目标行的方法
你的代码存在两个关键问题:
- 错误用字符串判断缺失值:
DateStartRole!="NA"是在判断单元格内容是否为字符串"NA",但tibble里的缺失值是原生NA,必须用is.na()函数检测。 - 逻辑条件错误:原代码用
&(且)连接两个条件,要求同时满足「DateStartRole不是NA」和「CSO不等于1」,这会直接删掉所有CSO=1的行,不管DateStartRole是否有值,不符合你的需求。
正确逻辑是仅排除同时满足CSO=1且DateStartRole为NA的行,也就是保留「CSO不等于1」或者「DateStartRole不是NA」的行。以下是几种可行写法:
用base R的subset函数
# 取反写法:直接排除目标行 test <- subset(refinitiv_boardex, !(CSO == 1 & is.na(DateStartRole))) # 等价的逻辑或写法:保留符合任一条件的行 test <- subset(refinitiv_boardex, CSO != 1 | !is.na(DateStartRole))
用dplyr包的filter(更适配tibble操作)
如果习惯用tidyverse工具链,代码可读性更强:
library(dplyr) test <- refinitiv_boardex %>% filter(!(CSO == 1 & is.na(DateStartRole))) # 或者逻辑或版本 test <- refinitiv_boardex %>% filter(CSO != 1 | !is.na(DateStartRole))
以上写法都会精准删除你指定的目标行,其余行全部保留。
内容的提问来源于stack exchange,提问作者FaFe
相关产品推荐
相关产品推荐

