Заменить значение существующего столбца в зависимости от того, присутствует ли он в списке

У меня есть пример фрейма данных как таковой:

dat <- data.frame(V1 = c("Non Debt Balance","Non Debt Income","Non Debt Cost"), 
              V2 = c("Average Balance","Income","Cost"), 
              V3 = c("Trade","Sales Finance","Trade"))

Я хотел бы создать новый столбец на основе значения столбца V2. Если столбец V2 равен% в% ("Доход","Стоимость"), то я бы хотел, чтобы новый столбец выбрал столбец V3, если его нет в списке, то V2.

Я думал об использовании функции%in%, но не уверен, как мне поступить, если в этом списке if получит этот столбец, иначе получит логику этого столбца.

Помощь очень ценится. С Уважением,

3 ответа

Решение

Это то, что вы ищете?

library(dplyr)

dat %>% 
  mutate(V4 = case_when(V2 == "Income" | V2 == "Cost" ~ V3,
                        TRUE ~ V2))

                V1              V2            V3              V4
1 Non Debt Balance Average Balance         Trade Average Balance
2  Non Debt Income          Income Sales Finance   Sales Finance
3    Non Debt Cost            Cost         Trade           Trade

В качестве альтернативы, используя %in% как вы упомянули:

dat %>% 
  mutate(V4 = case_when(V2 %in% c("Cost", "Income") ~ V3,
                        TRUE ~ V2))

Данные:

dat <- data.frame(V1 = c("Non Debt Balance","Non Debt Income","Non Debt Cost"), 
                  V2 = c("Average Balance","Income","Cost"), 
                  V3 = c("Trade","Sales Finance","Trade"),
                  stringsAsFactors = FALSE)
dat$NewCol <- ifelse(dat$V2 %in% c('Income','Cost'), dat$V3, dat$V2)
  • Вы также можете использовать dplyr/data.table
  • ifelse не имеет лучшей производительности. Также вы не можете выполнять сравнения с учетом NA (т. Е. Трехсторонний выбор с предложением NA)

data.table путь:

 result <- setDT(dat)[,result_col:= ifelse(V2 %in% c('Income','Cost'), V3, V2)]


> result

    V1                    V2            V3             result_col
1  Non Debt Balance   Average Balance  Trade         Average Balance
2  Non Debt Income       Income     Sales Finance     Sales Finance
3  Non Debt Cost          Cost         Trade             Trade
Другие вопросы по тегам