R中的多条件和双条件

时间:2018-09-10 20:47:19

标签: r

我有一个带有多个条件的语句,如下所示

with(x_in
  [
    x_in$Power_KW < 1700 
    & x_in$Power_KW  > 0 
    & x_in$Power_KW  < x_in$Expected_Power_KW*1.1 
    & x_in$Power_KW  > x_in$Expected_Power_KW*.9
  ,], 

    plot(x_in$Wind_Speed_, x_in$Power_KW ,col="gray48"
      ,main= titlename, col.main = "black", cex=.5,pch=16
      ,col.lab="black",col.axis = 'black',cex.lab=1.25
      ,xlim=c(0, 25), ylim=c(0, 1800))
    )

这工作得很好,但是我需要添加一个附加条件,即当“ Wind_Speed_”都大于12且“ Power_KW”都大于1550时,我还要过滤其他数据。这对于附加过滤来说都必须为真。

我知道需要附加一条AND语句,但是我不知道如何在多个真实条件下执行该操作。我尝试使用exists,但是我不知道我的语法或其确切工作方式。这可能也不是解决问题的最佳方法。

谢谢!

编辑:为了更加清楚-我只想过滤掉小于1550的“ Power_KW”数据,前提是“ Wind_Speed_”大于12。如果“ Wind_Speed_”小于12,我什么都不想要完成它。

2 个答案:

答案 0 :(得分:1)

with(x_in
  [
    (x_in$Power_KW < 1700 & x_in$Power_KW > 1550)
    # & x_in$Power_KW  > 0                        This is redundant
    & x_in$Power_KW  < x_in$Expected_Power_KW*1.1 
    & x_in$Power_KW  > x_in$Expected_Power_KW*.9
    & x_in$Wind_Speed_ > 12
  ,], 

    plot(x_in$Wind_Speed_, x_in$Power_KW ,col="gray48"
      ,main= titlename, col.main = "black", cex=.5,pch=16
      ,col.lab="black",col.axis = 'black',cex.lab=1.25
      ,xlim=c(0, 25), ylim=c(0, 1800))
    )

由于您说的是条件需要一起应用,所以我们可以将所有条件都添加为&条件。

编辑:

我假设您的第一组过滤器是正确的,并且您需要根据您提到的新条件进一步过滤掉一些行。

x_filtered <- x_in
  [
    x_in$Power_KW < 1700 
    & x_in$Power_KW  > 0 
    & x_in$Power_KW  < x_in$Expected_Power_KW*1.1 
    & x_in$Power_KW  > x_in$Expected_Power_KW*.9
  ,]

在此中间data.frame上,我们可以应用其他过滤器:

x_final <- x_filtered[(x_filtered$Wind_Speed_ < 12) | 
                      (x_filtered$Wind_Speed_ > 12 & x_filtered$Power_KW > 1550), ]

您可以像这样一口气做到这一点:

x_final <- x_in
      [
        x_in$Power_KW < 1700 
        & x_in$Power_KW  > 0 
        & x_in$Power_KW  < x_in$Expected_Power_KW*1.1 
        & x_in$Power_KW  > x_in$Expected_Power_KW*.9
      ,][(x_filtered$Wind_Speed_ < 12) | 
         (x_filtered$Wind_Speed_ > 12 & x_filtered$Power_KW > 1550), ]

答案 1 :(得分:0)

不确定我是否理解正确,但是您只需要一个条件,该条件将两个必须为真的语句组合在一起。您需要使用括号。

 with(x_in
      [
        x_in$Power_KW < 1700 
        & x_in$Power_KW  > 0 
        & x_in$Power_KW  < x_in$Expected_Power_KW*1.1 
        & x_in$Power_KW  > x_in$Expected_Power_KW*.9
        &(x_in$Wind_Speed_ > 12 & x_in$Power_KW > 1550)
      ,], 

        plot(x_in$Wind_Speed_, x_in$Power_KW ,col="gray48"
          ,main= titlename, col.main = "black", cex=.5,pch=16
          ,col.lab="black",col.axis = 'black',cex.lab=1.25
          ,xlim=c(0, 25), ylim=c(0, 1800))
        )