Entschuldigung, wenn diese Frage bereits beantwortet wurde, aber ich habe es nicht gefunden. Ich werde alle meine Ideen veröffentlichen, um es zu lösen. Das Problem ist, dass die Datenbank groß ist und mein PC diese Berechnung nicht durchführen kann (Core i7 und 8 GB RAM). Ich verwende Microsoft R Open 3.3.2 und RStudio 1.0.136.Erstellen Sie Spalte in R in einer großen Datenbank
Ich habe versucht, eine neue Spalte in einer großen Datenbank in R namens tcm.RData (471 MB) zu erstellen. Mein Bedarf ist eine Spalte, die Shape_Area durch die Summe von Shape_Area durch COD (die ich ShapeSum nannte) teilt. Ich versuchte zuerst, es in einer einzigen Formel zu tun, aber als es fehlschlug, versuchte ich es erneut in zwei Schritten mit 1) summiere Shape_Area durch COD und, wenn das gelingt, Shape_Area durch ShapeSum zu teilen.
> str(tcm)
Classes ‘data.table’ and 'data.frame': 26835293 obs. of 15 variables:
$ OBJECTID : int 1 2 3 4 5 6 7 8 9 10 ...
$ LAT : num -15.7 -15.7 -15.7 -15.7 -15.7 ...
$ LONG : num -58.1 -58.1 -58.1 -58.1 -58.1 ...
$ UF : chr "MT" "MT" "MT" "MT" ...
$ COD : num 510562 510562 510562 510562 510562 ...
$ AREA_97 : num 1130 1130 1130 1130 1130 ...
$ Shape_Area: num 255266.7 14875 25182.2 5503.9 95.5 ...
$ TYPE : chr "2" "2" "2" "2" ...
$ Nomes : chr NA NA NA NA ...
$ NEAR_DIST : num 376104 371332 371410 371592 371330 ...
$ tc_2004 : chr "AREA_URBANA" "DESFLORESTAMENTO_2004" "DESFLORESTAMENTO_2004" "DESFLORESTAMENTO_2004" ...
$ tc_2008 : chr "AREA_URBANA" "AREA_NAO_OBSERVADA" "AREA_NAO_OBSERVADA" "AREA_NAO_OBSERVADA" ...
$ tc_2010 : chr "AREA_URBANA" "PASTO_LIMPO" "PASTO_LIMPO" "PASTO_LIMPO" ...
$ tc_2012 : chr "AREA_URBANA" "PASTO_SUJO" "PASTO_SUJO" "PASTO_SUJO" ...
$ tc_2014 : chr "AREA_URBANA" "PASTO_LIMPO" "PASTO_LIMPO" "PASTO_SUJO" ...
- attr(*, ".internal.selfref")=<externalptr>
> tcm$ShapeSum <- tcm[, Shape_Area := sum(tcm$Shape_Area), by="COD"]
Error: cannot allocate vector of size 204.7 Mb
Error during wrapup: cannot allocate vector of size 542.3 Mb
Ich habe auch versucht die folgenden Codes, aber alle von ihnen schlug fehl:
> tcm$ShapeSum <- apply(tcm[, c(Shape_Area)], 1, function(x) sum(x), by="COD")
Error in apply(tcm[, c(Shape_Area)], 1, function(x) sum(x), by = "COD") : dim(X) must have a positive lenght
> tcm$ShapeSum <- mutate(tcm, ShapeSum = sum(Shape_Area), by="COD", package = "dplyr")
Error: cannot allocate vector of size 204.7 Mb Error during wrapup: cannot allocate vector of size 542.3 Mb
> tcm$ShapeSum <- tcm[, transform(tcm, ShapeSum = sum(Shape_Area)), by="COD"]
> tcm$ShapeSum <- transform(tcm, aggregate(tcm$AreaShape, by=list(Category=tcm$COD), FUN=sum))
Error in aggregate.data.frame(as.data.frame(x), ...): no rows to aggregate
ich für Aufmerksamkeit sehr viel danken und für irgendeinen Vorschlag Maßnahmen, um dieses Problem zu lösen.
Da es eine data.table ist, ist es besser, 'data.table' Methoden zu verwenden, dh. 'tcm [, ShapeSum: = Summe (Shape_Area), von = COD]' – akrun