Мульти условный с двойным условным в R - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть оператор с несколькими условиями, как показано ниже

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, но я не думаю, что знаю синтаксис или как он работает.Это также может быть не лучшим способом решения проблемы.

Спасибо!

РЕДАКТИРОВАТЬ: Для большей ясности - я хочу только отфильтровать данные для "Power_KW", которые меньше ТОЛЬКО 1550ЕСЛИ «Wind_Speed_» больше 12. Если «Wind_Speed_» меньше 12, я не хочу, чтобы с ним что-либо делали.

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Не уверен, правильно ли я понял, но вам просто нужно условие, которое объединяет два утверждения, которые должны быть истинными.Использование скобок - это то, что вам нужно.

 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))
        )
0 голосов
/ 11 сентября 2018
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))
    )

Поскольку вы сказали, что условия должны применяться вместе, мы можем просто добавить их все вместе как & условия.

EDIT:

Я предполагаю, что ваш первый набор фильтров правильный, и вам нужно дополнительно отфильтровать некоторые строки на основе новых условий, которые вы упомянули.

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), ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...