如何删除 R 中两个条件适用的那些行?

How can I delete those rows in R where two conditions apply?

提问人:FaFe 提问时间:11/9/2023 更新时间:11/9/2023 访问量:50

问:

我有两个变量“CSO”(1 或 0)和“DateStartRole”(特定日期或 NA)。现在,如果变量“CSO”等于 1,同时变量“DateStartRole”的值为“NA”,我想删除我的 tibble “refinitiv_boardex” 中的这些行。

# Remove CSO directors that have NA on their DateStartRole variable
test <- subset(refinitiv_boardex, refinitiv_boardex$DateStartRole!="NA" & refinitiv_boardex$CSO!=1)

不幸的是,此代码会导致删除变量“CSO”为 1 的所有行。

r 条件语句

评论

1赞 stefan 11/9/2023
请尝试使用 。您正在检查字符串 。顺便说一句:在其中没有必要使用 .!is.na(DateStartRole)"NA"subsetrefinitiv_boardex$
0赞 FaFe 11/9/2023
输入: test <- subset(refinitiv_boardex, !is.na(DateStartRole) & CSO!=1) count(test, CSO) Output: CSO n 1 0 210887 不幸的是,它仍然删除了所有 CSO。
0赞 stefan 11/9/2023
不好意思。我的错。 将删除所有缺少且等于 1 的行。subset(refinitiv_boardex, !(is.na(DateStartRole) & CSO == 1))DateStartRoleCSO

答:

0赞 Adriano Mello 11/9/2023 #1

如果您提供示例或示例,它会有所帮助。比方说:

library(dplyr)
library(lubridate) # ymd()

refinitiv_boardex <- tibble(
      CSO = c(1, 1, 0, 0, 1),
      DateStartRole = ymd(NA, "2023-10-07", NA, "2021-12-31", NA))

# A tibble: 5 × 2
    CSO DateStartRole
  <dbl> <date>       
1     1 NA           
2     1 2023-10-07   
3     0 NA           
4     0 2021-12-31   
5     1 NA  

我们想删除第一行和最后一行,对吧?这里有一个可能的解决方案:dplyr

refinitiv_boardex <- filter(
  refinitiv_boardex, 
  CSO != 1 | !is.na(DateStartRole))

# A tibble: 3 × 2
    CSO DateStartRole
  <dbl> <date>       
1     1 2023-10-07   
2     0 NA           
3     0 2021-12-31 

记住布尔代数:.not(A and B) = not(A) or not(B)