Combining rows based on a column

后端 未结 1 604
慢半拍i
慢半拍i 2020-12-11 14:23
    structure(list(UserID = c(42L, 42L, 42L, 95L, 95L, 95L, 95L, 
95L), TotalSpend_A = c(NA, NA, NA, NA, 177.12, NA, NA, NA), 
    TotalSpend_B = c(NA, 40.78, NA, NA         


        
相关标签:
1条回答
  • 2020-12-11 14:54

    With dplyr:

    library(dplyr)
    
    df %>% 
      group_by(UserID) %>% 
      summarise_all(funs(sum(., na.rm = TRUE)))
    
    # A tibble: 2 x 6
      UserID TotalSpend_A TotalSpend_B TotalSpend_C TotalSpend_D TotalSpend_E
       <int>        <dbl>        <dbl>        <dbl>        <dbl>        <dbl>
    1     42         0.00        40.78         6.74            0          0.0
    2     95       177.12        62.87        96.91            0          1.1
    

    Base R:

    aggregate(. ~ UserID, df, sum, na.rm = TRUE, na.action = "na.pass")
    
      UserID TotalSpend_A TotalSpend_B TotalSpend_C TotalSpend_D TotalSpend_E
    1     42         0.00        40.78         6.74            0          0.0
    2     95       177.12        62.87        96.91            0          1.1
    

    And data.table:

    DT <- data.table::setDT(df)
    DT[, lapply(.SD, mean, na.rm = TRUE), by = UserID]
    
       UserID TotalSpend_A TotalSpend_B TotalSpend_C TotalSpend_D TotalSpend_E
    1:     42          NaN        40.78         6.74          NaN          NaN
    2:     95       177.12        62.87        96.91          NaN          1.1
    
    0 讨论(0)
提交回复
热议问题