выберите столбец мутирования во фрейме данных создан 1 поле 2 переменная data.frame - PullRequest
0 голосов
/ 09 марта 2020

Контекст проблемы: фрейм данных имеет следующую структуру. Проблема в том, что мне нужен новый столбец, например, status_rank, который не является data.frame из 2 переменных. Затем необходимо обновить status_rank значениями, основанными на другой переменной для условного выражения.

[опечатка: ifelse - это то, что я использовал]

Пробовал условно с target.market_b / _g («Плохо», «Хорошие» ценности). У 'status' есть эти плюс, которые должны игнорироваться (не == target.market_b / _g).

ifelse(status %in% target.marker_b, "Bad",
       ifelse(status %in% target_g, "Good", "N/A")

df $ status: chr df $ status_rank: 'data.frame' из 2 переменных. $ status chr "..." .. $ status_rank chr "Bad" "Good" "N / A"

Я использовал dplyr mutate, чтобы создать новое поле, и теперь я знаю, что он изменяет столбец status_rank. ». Теперь я вижу, что dplyr mutate не является правильным решением.

df$status_rank <- df %>% 
  select(status, status_rank) %>%
     mutate(status_rank = ifelse(status %in% target.marker_b, "Bad",
       ifelse(status %in% target_g, "Good", "N/A")))

Создано создание нового столбца с помощью

df["status_rank"] <- "N/A"

. Затем mutate оперировал 'status_rank' и преобразовал его в 2 наблюдения. Нужен лучший способ создать новый столбец и применить ifelse (статус% в% target.marker_b, «Плохо», ifelse (статус% в% target_g, «Хорошо», «Н / Д»). Ищем предложения.

Данные: dput (df $ status)

"Current", "Fully Paid", "Current", "Fully Paid", "Charged Off", "Current", "Current", "Fully Paid", "Current", "Fully Paid", "Charged Off", "Late (31-120 days)", "Current", "Fully Paid", "Current", "Fully Paid", "Charged Off", "Current", "Current", "Fully Paid", "Late (31-120 days)", "Fully Paid", "Charged Off", "Current"

1 Ответ

1 голос
/ 09 марта 2020

Немного сложно понять, о чем вы говорите, без воспроизводимого примера, однако функция case_when из dplyr может вас заинтересовать:

# Untested code (as no sample data was given)

library(dplyr)

df %>% 
  mutate(status_rank = case_when(
    status %in% target.marker_b ~ "Bad",
    status %in% target_g ~ "Good",
    TRUE ~ "N/A" # Default condition to catch other cases
  ))

Если вы хотите значение NA вместо символа «N / A» вам не нужно условие по умолчанию. Для строк, которые не соответствуют ни одному из условий, будет присвоено значение NA_character_.

, т. Е.

df %>% 
  mutate(status_rank = case_when(
    status %in% target.marker_b ~ "Bad",
    status %in% target_g ~ "Good"
  ))
.
...