Nested ifelse statement

前端 未结 9 1378
逝去的感伤
逝去的感伤 2020-11-22 04:02

I\'m still learning how to translate a SAS code into R and I get warnings. I need to understand where I\'m making mistakes. What I want to do is create a variable which summ

9条回答
  •  梦如初夏
    2020-11-22 04:22

    If the data set contains many rows it might be more efficient to join with a lookup table using data.table instead of nested ifelse().

    Provided the lookup table below

    lookup
    
         idnat     idbp   idnat2
    1:  french mainland mainland
    2:  french   colony overseas
    3:  french overseas overseas
    4: foreign  foreign  foreign
    

    and a sample data set

    library(data.table)
    n_row <- 10L
    set.seed(1L)
    DT <- data.table(idnat = "french",
                     idbp = sample(c("mainland", "colony", "overseas", "foreign"), n_row, replace = TRUE))
    DT[idbp == "foreign", idnat := "foreign"][]
    
          idnat     idbp
     1:  french   colony
     2:  french   colony
     3:  french overseas
     4: foreign  foreign
     5:  french mainland
     6: foreign  foreign
     7: foreign  foreign
     8:  french overseas
     9:  french overseas
    10:  french mainland
    

    then we can do an update while joining:

    DT[lookup, on = .(idnat, idbp), idnat2 := i.idnat2][]
    
          idnat     idbp   idnat2
     1:  french   colony overseas
     2:  french   colony overseas
     3:  french overseas overseas
     4: foreign  foreign  foreign
     5:  french mainland mainland
     6: foreign  foreign  foreign
     7: foreign  foreign  foreign
     8:  french overseas overseas
     9:  french overseas overseas
    10:  french mainland mainland
    

提交回复
热议问题