Update a Value in One Column Based on Criteria in Other Columns

前端 未结 4 710
遥遥无期
遥遥无期 2020-11-29 05:28

If my data frame (df) looks like this:

Name        State
John Smith  MI
John Smith  WI
Jeff Smith  WI

I want to rename the John Smith from

4条回答
  •  感动是毒
    2020-11-29 05:41

    As the OP has mentioned that he has "a very big data frame", it might be advantageous to use a binary search

    library(data.table)
    setDT(DF)[.("John Smith",  "WI"), on = .(Name=V1, State=V2), 
              Name := paste0(Name, 1)][]
    
              Name State
    1:  John Smith    MI
    2: John Smith1    WI
    3:  Jeff Smith    WI
    

    instead of a vector scan

    setDT(df)[State == "WI" & Name == "John Smith", Name := paste0(Name, "1")]
    

    In both variations the data object is updated by reference, i.e., without copying the whole object which save time and memory.

提交回复
热议问题