使用2列并使用R中的条件对数据帧进行子集

时间:2015-12-09 02:23:48

标签: r dataframe dplyr

我有一个这样的数据框:

ID <- c("A","B","C","D","E","F","G","H","I")
Measurement <- c('Length',NA,NA,NA,'Length','Length',NA,NA,'Length')
PT <- c(27,35,38,22,35,39,7,15,33)
df <- data.frame(ID,Measurement,PT)
Limit <- 25

我正在尝试使用限制作为条件对此数据框进行子集,以便排除任何具有(“PT”值&gt; limit AND Measuremnent = NA)的数据。

注意:但是我仍然希望包含任何有PT&gt;的数据。限制,但其中包含测量类型。在这种情况下,它的长度。

我试图这样做但我收到错误

df3 <- !subset(df3,df3$PT >= Limit & df3$Measurement == '')

我想要的输出是

  ID Measurement PT
1  A      Length 27
2  D        <NA> 22
3  E      Length 35
4  F      Length 39
5  G        <NA>  7
6  H        <NA> 15
7  I      Length 33

我知道这很简单,但我错过了某处的逻辑。有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

我们也可以

df[with(df, !(PT> Limit & is.na(Measurement))),]
#  ID Measurement PT
#1  A      Length 27
#4  D        <NA> 22
#5  E      Length 35
#6  F      Length 39
#7  G        <NA>  7
#8  H        <NA> 15
#9  I      Length 33

或使用dplyr

library(dplyr)
df %>%
   filter(!(PT > Limit & is.na(Measurement)))