r Replace only some table values with values from alternate table

后端 未结 4 1744
失恋的感觉
失恋的感觉 2021-01-27 02:45

This is not a \"vlookup-and-fill-down\" question.

My source data is excellent at delivering all the data I need, just not in in a usable form. Recent changes in volume

4条回答
  •  夕颜
    夕颜 (楼主)
    2021-01-27 03:23

    Assuming you want to replace NAs in onPO with values from Backordered here is a solution using dplyr::left_join:

    library(dplyr);
    left_join(inv, svc) %>%
        mutate(onPO = ifelse(is.na(onPO), Backordered, onPO)) %>%
        select(-Backordered, -`Rcv'd`);
    #         Item onHand demand onPO
    #1    10100200    600   3300 2700
    #2    10100201     NA     NA   20
    #3    10100202     39     40    1
    #4    10100203      0     40   40
    #5    10100204     NA     NA  100
    #6  10100205-A     NA     NA   18
    #7    10100206     40     70   30
    #8    10100207      0    126  126
    #9    10100208      0     10   10
    #10   10100209      0     10   10
    #11   10100210      0    250  250
    

    Or a solution in base R using merge:

    inv$onPO <- with(merge(inv, svc, all.x = TRUE), ifelse(is.na(onPO), Backordered, onPO))
    

    Or using coalesce instead of ifelse (thanks to @thelatemail):

    library(dplyr);
    left_join(inv, svc) %>%
        mutate(onPO = coalesce(onPO, Backordered)) %>%
        select(-Backordered, -`Rcv'd`);
    

提交回复
热议问题