R: комбинированный / вложенный оператор if_else - PullRequest
1 голос
/ 05 марта 2020

Может кто-нибудь сказать мне, что я здесь делаю не так. Попытка использовать комбинированный оператор if_else в R :: dplyr на основе значений двух столбцов. Код ниже не работает - только дает X + 90?

Ссылка на CSV: https://www.dropbox.com/s/nmyiwdazsvs7wko/VideoTrack_ed.csv?dl=0

library(readr)
library(dplyr)

VidTrack <- read_csv("VideoTrack_ed.csv")

x <- VidTrack$course

Perp <- if_else(("R" %in% VidTrack$Side & VidTrack$course<270), x+90, x-270,
                if_else(("L" %in% VidTrack$Side & VidTrack$course<90), x+270,
                        x-90))
Perp_df <- as.data.frame(Perp)

В Excel это было бы; =IF(AND(H2="R",Z2<270),Z2+90,IF(AND(H2="R",Z2>=270),Z2+270,IF(AND(H2="L",Z2<90),Z2+270,Z2-90)))

Column H = VidTrack$Side
Column Z = VidTrack$course

Ответы [ 2 ]

2 голосов
/ 05 марта 2020

Мы можем использовать case_when, перечисляя все условия, которые должны выполняться последовательно.

library(dplyr)

VidTrack %>%
   mutate(new_column = case_when(
                       Side == "R" & course < 270 ~ course + 90, 
                       Side == "R" & course >= 270  ~ course - 270, 
                       Side == "L" & course < 270 ~ course + 270, 
                       Side == "L" & course >= 90 ~ course - 90))
0 голосов
/ 05 марта 2020

Я не могу открыть файл, поэтому не могу помочь. Но разве не должно быть так:

Perp <- if_else((VidTrack$Side == "R" & VidTrack$course < 270), x+90, x-270,
                if_else((VidTrack$Side == "L" & VidTrack$course < 90), x+270,
                        x-90))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...