提问人:FaFe 提问时间:11/9/2023 更新时间:11/9/2023 访问量:50
如何删除 R 中两个条件适用的那些行?
How can I delete those rows in R where two conditions apply?
问:
我有两个变量“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 的所有行。
答:
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)
评论
!is.na(DateStartRole)
"NA"
subset
refinitiv_boardex$
subset(refinitiv_boardex, !(is.na(DateStartRole) & CSO == 1))
DateStartRole
CSO