Условно обновить дату в кадре данных - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть следующие данные.

 df_a <- data.frame(id=c("John","Ben","Bill", "Eminem"),
                     amount=c("300", "500", "1000", "1200"),
                     issue_date=as.Date(c("2010-01-01","2011-01-01","2012-01-01", "2015-02-01")),
                     last_pymnt_date=as.Date(c("2013-02-01","2012-05-01","2014-01-01", "2018-02-01")),
                     months_passed=c(37,16,24,36),
                     term = c("36", "36", "36", "36"),
                     status=c("Fully Paid",
                              "Charged off",
                              "Does not meet the credit policy. Status:Charged Off",
                              "Does not meet the credit policy. Status:Fully Paid"),
                     stringsAsFactors = F)

    library(DescTools)
    df_a$maturity_dt <- AddMonths(df_a$issue_date, 36)

Я хочу сделать last_pymnt_date таким же, как maturity_dt, если переменная status содержит выражение «Полностью оплачено». Если я запускаю следующую строку, она делает last_pymnt_date переменную некоторых чисел.

df_a$last_pymnt_date <- ifelse(grepl("Fully Paid", df_a$status),
                               df_a$maturity_dt,
                               df_a$last_pymnt_date)

Есть предложения?

Спасибо

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Решение с использованием dplyr:

df_a$last_pymnt_date <- dplyr::if_else(grepl("Fully Paid", df_a$status),
                                       df_a$maturity_dt, 
                                       df_a$last_pymnt_date)

dplyr s case_when также является хорошей альтернативой ifelse, особенно если у вас есть больше условий:

df_a$last_pymnt_date <- dplyr::case_when(
                                   grepl("Fully Paid", df_a$status) ~ df_a$maturity_dt, 
                                   TRUE ~ df_a$last_pymnt_date)

Или используя data.table:

library(data.table)

df_a <- setDT(df_a)[grepl("Fully Paid", status), last_pymnt_date := maturity_dt]
0 голосов
/ 02 ноября 2018

Вот простой способ сделать это. Только что выделенный grepl тест для улучшения читаемости.

test <- grepl("Fully Paid", df_a$status)

df_a$last_pymnt_date[test] <- df_a$maturity_dt[test]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...