使用dplyr过滤特定的情况下,(Filter a specific case using dply

2019-10-22 21:52发布

说我有以下的通用数据

A <- c(1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5)
B <- c(1,1,2,1,2,1,2,3,2,3,3,4,4,3,2,3,3,4,4,5,4,4,5,5,5)
C <- c(1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0)
Data <- data.frame(A,B,C)

然后,我创建了以下情节向日葵

库(动物园)

Data$F = ifelse(Data$C==1,Data$A,NA)

Data$F = na.locf(Data$F)

Data$G = ifelse(Data$C==1,NA,Data$B)

sunflowerplot(Data$G ~ Data$F,
              main = "Flower_plot", 
              xlab = "B value where C==1",
              ylab = "B value where C==0",
              size = 0.25, cex.lab = 1.3, mgp = c(2.3,1,0))

而当我们在看剧情,我们要删除一些数据。

我们要删除其中对于C = 1和B = 3,数据,其中C = 0和B = 4

我已经试过这样的事情

library(dplyr)    
Data_cleaned <- Data %>%
      group_by(C) %>%
      filter(rm(B==4[A==3 & C==0]))

Answer 1:

尝试这个:

Data_cleaned <- Data %>%
  filter(!(B==4 & A==3 & C==0))

!NOT -否定的结果。



Answer 2:

zx8754回答是好。 我只是添加可能data.table的解决方案,这将是既快速(二进制加入),并可以让你避免指定列名,如果你想要做相同的列不同的子集操作( <-将保留键)

library(data.table)
setkey(setDT(Data), A, B, C)
Data[!J(3, 4, 0)]


文章来源: Filter a specific case using dplyr
标签: r dplyr