Ich habe einige große Datensätze und probiere data.table
, um sie zu kombinieren, während die gemeinsame Spalte über übereinstimmende Zeilen summiert. Ich weiß, wie [
passende Zeilen in der LHS data.table mit fusionieren, wie unten dargestellt mit Tabellen a2
: LHS und a
: RHSkombinieren data.tables und summieren die gemeinsame Spalte
a2 <- data.table(b= c(letters[1:5],letters[11:15]), c = as.integer(rep(100,10)))
a <- data.table(b = letters[1:10], c = as.integer(1:10))
setkey(a2 ,"b")
setkey(a , "b")
a2
b c
1: a 100
2: b 100
3: c 100
4: d 100
5: e 100
6: k 100
7: l 100
8: m 100
9: n 100
10: o 100
a
b c
1: a 1
2: b 2
3: c 3
4: d 4
5: e 5
6: f 6
7: g 7
8: h 8
9: i 9
10: j 10
von den zweiten Antwort hier Merge data frames whilst summing common columns in R ich sah, wie Spalten über passende Zeilen zusammengefasst werden könnten , als solche:
setkey(a , "b")
setkey(a2, "b")
a2[a, `:=`(c = c + i.c)]
a2
b c
1: a 101
2: b 102
3: c 103
4: d 104
5: e 105
6: k 100
7: l 100
8: m 100
9: n 100
10: o 100
Allerdings versuche ich, die Zeilen zu behalten, die nicht übereinstimmen.
Alternativ könnte ich merge
wie unten gezeigt verwenden, aber ich möchte eine Lücke machen eine neue Tabelle mit 4 Zeilen, bevor Sie es auf 2 Zeilen reduzieren.
c <- merge(a, a2, by = "b", all=T)
c <- transform(c, value = rowSums(c[,2:3], na.rm=T))
c <- c[,c(1,4)]
c
b value
1: a 102
2: b 104
3: c 106
4: d 108
5: e 110
6: f 6
7: g 7
8: h 8
9: i 9
10: j 10
11: k 100
12: l 100
13: m 100
14: n 100
15: o 100
Diese letzte Tabelle ist, was ich erreichen möchte, Vielen Dank im Voraus.
Oder 'rbindlist (Liste (a, a2)) [, Summe (c), b]'? – A5C1D2H2I1M1N2O1R2T1
Danke ich sehe sie beide arbeiten. Ich versuche die '[, sum ..] Syntax zu verstehen und schaue wieviel Speicher sie benutzen. – Bhail