Let's say I have a data.frame
sample_df = structure(list(AE = c(148, 1789, 1223, 260, 1825, 37, 1442, 484, 
10, 163, 1834, 254, 445, 837, 721, 1904, 1261, 382, 139, 213), 
    FW = structure(c(1L, 3L, 2L, 3L, 3L, 1L, 2L, 3L, 2L, 2L, 
    3L, 2L, 3L, 2L, 1L, 3L, 1L, 1L, 1L, 3L), .Label = c("LYLR", 
    "OCXG", "BIYX"), class = "factor"), CP = c("WYB/NXO", "HUK/NXO", 
    "HUK/WYB", "HUK/NXO", "WYB/NXO", "HUK/WYB", "HUK/NXO", "HUK/NXO", 
    "WYB/NXO", "HUK/NXO", "WYB/NXO", "HUK/NXO", "HUK/WYB", "WYB/NXO", 
    "HUK/WYB", "WYB/NXO", "WYB/NXO", "HUK/WYB", "WYB/NXO", "WYB/NXO"
    ), SD = c(1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, -1, 1, -1, 
    -1, 1, -1, 1, 1, 1)), .Names = c("AE", "FW", "CP", "SD"), row.names = c(NA, -20L), class = "data.frame")
Or in human readable format:
     AE   FW      CP SD
1   148 LYLR WYB/NXO  1
2  1789 BIYX HUK/NXO  1
3  1223 OCXG HUK/WYB -1
4   260 BIYX HUK/NXO  1
5  1825 BIYX WYB/NXO  1
6    37 LYLR HUK/WYB  1
7  1442 OCXG HUK/NXO  1
8   484 BIYX HUK/NXO -1
9    10 OCXG WYB/NXO  1
10  163 OCXG HUK/NXO  1
11 1834 BIYX WYB/NXO -1
12  254 OCXG HUK/NXO -1
13  445 BIYX HUK/WYB  1
14  837 OCXG WYB/NXO -1
15  721 LYLR HUK/WYB -1
16 1904 BIYX WYB/NXO  1
17 1261 LYLR WYB/NXO -1
18  382 LYLR HUK/WYB  1
19  139 LYLR WYB/NXO  1
20  213 BIYX WYB/NXO  1
now suppose that for each unique value (fw,cp) of (FW,CP), I would like to get 
- sum of all values of AEfor(FW,CP)=(fw,cp)
- mean of all values of SDfor(FW,CP)=(fw,cp)
In R, one could do something like:
unique_keys  <- unique(sample_df[,c('FW','CP')])
slow_version <- function(ind, sample_df, unique_keys){
    index <- which(sample_df$FW == unique_keys$FW[ind] & sample_df$CP == unique_keys$CP[ind])
    c(ind    = ind,
               sum_ae = sum(sample_df$AE[index]), 
               min_ae = mean(sample_df$SD[index]))
}
intermed_result <- t(sapply(1:nrow(unique_keys), slow_version, 
                                      sample_df = sample_df, 
                                    unique_keys = unique_keys))
colnames(intermed_result) <- c('ind','sum','mean')
result <- data.frame(unique_keys[intermed_result[, 'ind'], ], 
                    'sum' = intermed_result[,'sum'], 
                    'mean' = intermed_result[,'mean'])
but this gets pretty slow as the size of data_frame grows. 
Thanks to this answer, I suspect it is possible to use data.table magic to get the same result fastly. But doing:
library(data.table)
sample_dt = data.table(sample_df)
setkey(sample_dt, FW, CP)
f <- function(AE, SD) {list('sum' = sum(AE), 'mean' = mean(SD))} 
sample_dt[,c("col1","col2"):=f(AE, SD), by=.(FW, CP)][]
does not yield the desired result. What is the correct way?
 
     
    