dat <- data.frame(ID = c(1, 2, 2, 2), Gender = c("Both", "Both", "Male", "Female"))
> dat
ID Gender
1 1 Both
2 2 Both
3 2 Male
4 2 Female
对于每个ID,如果性别是Both
、Male
和Female
,我希望删除带有Both
的行。也就是说,我想要的数据是:
ID Gender
1 1 Both
2 2 Male
3 2 Female
我已经尝试过使用下面的代码来完成此操作:
library(dplyr)
> dat %>%
group_by(ID) %>%
mutate(A = ifelse(length(unique(Gender)) >= 3 & Gender == 'Both', F, T)) %>%
filter(A) %>%
select(-A)
# A tibble: 2 x 2
# Groups: ID [1]
ID Gender
<dbl> <fctr>
1 2 Male
2 2 Female
我声明了一个名为A
的伪变量,其中A = F
如果对于给定的ID
,Gender
的所有3个元素都存在("Both“、"Male”和"Female";这些是Gender
可以接受的不同值,其他值是不可能的),相应的行将具有Gender == Both
。然后,我将删除该行。
但是,似乎我将A = F
赋给了第一行,即使它的Gender
只是"Both",而不是“Both”、"Male“和"Female"?
https://stackoverflow.com/questions/50788898
复制相似问题