Условный фильтр одного столбца и обновление той же строки в новом столбце - PullRequest
0 голосов
/ 07 декабря 2018

Можно ли сделать условный фильтр в одном столбце и впоследствии обновить другой столбец, но с той же позицией строки?

Вот воспроизводимый пример:

df <- data.frame(name = c("Tom", "Harry", "Charles"), Amount = c(30, -30, 49), Budget = c(51, 53, 55))

     name Amount Budget
1     Tom     30     51
2   Harry    -30     53
3 Charles     49     55

Например, я пытаюсь отфильтровать все значения ниже 0 в столбце суммы и обновить столбец бюджета (заменить существующийзначение) для Гарри.

     name Amount Budget
1     Tom     30     51
2   Harry           -30
3 Charles     49     55

Может ли кто-нибудь указать мне правильное направление?спасибо!

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Вот решение dplyr.Сначала я создаю фрейм данных.

df <- data.frame(name = c("Tom", "Harry", "Charles"), 
                 Amount = c(30, -30, 49), 
                 Budget = c(51, 53, 55))

Затем я устанавливаю Budget на Amount, если Amount меньше нуля, затем устанавливаю Amount на NA, если Amountменьше нуля.

df %>% 
  mutate(Budget = ifelse(Amount < 0, Amount, Budget),
         Amount = ifelse(Amount < 0, NA, Amount))

дает,

#      name Amount Budget
# 1     Tom     30     51
# 2   Harry     NA    -30
# 3 Charles     49     55

Конечно, вы можете установить Amount в ноль, а не NA, если хотите.

0 голосов
/ 07 декабря 2018

Мы можем сделать

#Find out indices where Amount is less than 0
inds <- df$Amount < 0

#Replace the corresponding Budget value by Amount value
df$Budget[inds] <- df$Amount[inds]

#Change the Amount to 0
df$Amount[inds] <- 0 #Replacing it with 0 since it's a numeric column

df

#     name Amount Budget
#1     Tom     30     51
#2   Harry      0    -30
#3 Charles     49     55
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...