2017-07-22 15 views

Antwort

2

Sie B in Faktor umwandeln könnte und dann die Ebenen, dies zu tun ändern:

#convert B to factor 
dt[, B := factor(B)] 
#change levels to ab and c 
levels(dt$B) <- c('ab', 'ab', 'c') 
#group and sum 
dt[, sum(A), by = B] 
# B V1 
#1: ab 12 
#2: c 3 

oder alternativ per @akrun ‚s Kommentar Sie tun können, :

dt[, .(B = paste(unique(B), collapse=""), A = sum(A)), 
    .(grp = B %in% c('a', 'b'))][, grp := NULL][] 

Oder wie pro @Frank ‚s Kommentar:

mDT = unique(dt[, "B"])[, g := B][B %in% c("a","b"), g := "ab"] 
dt[mDT, on=.(B)][, sum(A), by=g] 
+1

Das ist ein schöner @akrun. Warum postest du es nicht als neues? Es ist nur in einem Anruf auch getan! – LyzandeR

+0

Es ist okay, Sie können es in Ihrem Beitrag hinzufügen, da dies einige Betrüger haben kann – akrun

+0

Schöne Lösung von 'factor' ~ +1 – Wen

Verwandte Themen