Как сделать значения столбца отрицательными, если False в другом столбце - PullRequest
0 голосов
/ 20 октября 2018

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

Это набор данных, о котором мы говорим:

   NS    WE  LatCopy  LongCopy
FALSE FALSE 48.89328  5.803433
TRUE  FALSE 48.55725  6.877400
TRUE  FALSE 48.39922  9.383667
FALSE TRUE  48.37538  9.517017
TRUE  FALSE 48.20710 12.324067
TRUE  TRUE  48.16878 12.822067

Поскольку это координаты, мне пришлось отменить направления ветра, чтобы преобразовать их в десятичные градусы.Однако у меня сейчас нет индикатора.

Результат, который я ищу, выглядит примерно так:

   NS    WE  LatCopy  LongCopy
FALSE FALSE 48.89328 -5.803433
TRUE  FALSE 48.55725 -6.877400
TRUE  FALSE 48.39922 -9.383667
FALSE TRUE -48.37538  9.517017
TRUE  FALSE 48.20710 -12.32406
TRUE  TRUE 48.16878 -12.82206

data

df <- read.table(text="NS    WE  LatCopy  LongCopy
FALSE FALSE 48.89328  5.803433
TRUE  FALSE 48.55725  6.877400
TRUE  FALSE 48.39922  9.383667
FALSE TRUE  48.37538  9.517017
TRUE  FALSE 48.20710 12.324067
TRUE  TRUE  48.16878 12.822067",h=T)

Ответы [ 3 ]

0 голосов
/ 20 октября 2018

Вы также можете использовать sign с небольшим изменением:

df[c("LongCopy", "LatCopy")]  <- 
  df[c("LongCopy", "LatCopy")] * sign(.5-df[c("NS","WE")]) # or `2*` instead of sign
#      NS    WE   LatCopy   LongCopy
# 1  TRUE FALSE  48.89328  -5.803433
# 2  TRUE FALSE  48.55725  -6.877400
# 3  TRUE FALSE  48.39922  -9.383667
# 4 FALSE  TRUE -48.37538   9.517017
# 5  TRUE FALSE  48.20710 -12.324067
# 6  TRUE FALSE  48.16878 -12.822067
0 голосов
/ 20 октября 2018

Просто чтобы иметь множество возможностей, решение dplyr:

data %>%
  mutate(LatCopy = ifelse(NS, LatCopy, -LatCopy),
         LongCopy = ifelse(WE, LongCopy, -LongCopy))

A data.table решение:

setDT(data)[, LatCopy := ifelse(NS, LatCopy, -LatCopy)
            ][, LongCopy := ifelse(WE, LongCopy, -LongCopy)]
0 голосов
/ 20 октября 2018
dataframe$LatCopy  <- ifelse(dataframe$WE == TRUE, -dataframe$LatCopy, dataframe$LatCopy)
dataframe$LongCopy <- ifelse(dataframe$NS == TRUE, -dataframe$LongCopy , dataframe$LongCopy )

Вы можете попробовать что-то подобное?У меня нет открытого R, поэтому я не могу его проверить, но это то, с чего я бы начал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...