Ich habe drei data.table, wo jeder im quadratischen Raster gepaart werden muss. Ich möchte nur auf dem oberen/unteren Dreieck des Rasterquadrats laufen. Ich wette, das ist in anderen Programmiersprachen wie Java etwas geradeheraus, aber ich weiß nicht, wie ich es in R machen soll. Weiß irgendjemand irgendeinen Trick, dies einfach zu tun?Wie bekomme ich eine data.table des oberen oder unteren Dreiecks im Rasterquadrat?
Daten
mylist <- list(
a <- data.table(
start=seq(1, by=9, len=10), stop=seq(6, by=9, len=10),
ID=letters[seq(1:10)], score=sample(1:25, 10, replace = FALSE)),
b <- data.table(
start=seq(2, by=11, len=10), stop=seq(8, by=11, len=10),
ID=letters[seq(1:10)], score=sample(1:25, 10, replace = FALSE)),
c <- data.table(
start=seq(4, by=11, len=10), stop=seq(9, by=11, len=10),
ID=letters[seq(1:10)], score=sample(1:25, 10, replace = FALSE))
)
alle möglichen Paare in quadratischen Raster (Ich habe manuell):
grid <- matrix((a,a), (a,b), (a,c),
(b,a), (b,b), (b,c),
(c,a), (c,b), (c,c),3,3)
ich nicht die richtige Methode Rasterobjekt finden konnte, effizient zu erstellen, so dass ich die grob Pinbelegung Gitter von Hand.
gewünschter Ausgang:
Rasterobjekt könnte Matrix oder eine andere Darstellung sein. Dies ist ein Scratch-Code, in dem man sich vorstellt, dass get.ovlp die oben erwähnte Gitternetzdarstellung zurückgibt, aber überlappende Paare wiederholt wurden. Mein Ziel ist es, indem nur diese wiederholten Paare entfernen nur auf dem oberen zu Fuß/unten Dreieck squre grid
library(data.table)
mylist <- list(a,b,c)
get.ovlp <- function(set, idx=1L) {
que <- set[[idx]]
supp <- lapply(set[-idx], function(ele_) {
ans <- data.table::foverlaps(que, ele_)
})
return(supp)
}
get.ovlp Funktion nur Spielzeug Beispiel ist, dass, wie wiederholt paarige Überlappung wie Rasterobjekt geschieht dargestellt.
Ich gehe nur auf Paar für obere/untere Dreieck (einschließlich Diagonale) von oben quadratischen Gitter, dann verwenden Sie foverlaps Funktion von data.table Paket. Kann jemand mögliche Ideen vorschlagen, um dieses Problem effizient zu lösen? Vielen Dank
die Linie des 'grid' Objekt zu bauen, nicht gültig ist, und erzeugt einen Fehler. Was meinst du mit 'lass jede data.table als Paar '? Die gewünschte Ausgabe ist mir nicht klar – nicola
@nicola: Ich konnte nicht die richtige Methode finden, um ordnungsgemäß Gitterobjekt effizient zu erstellen. Daher stelle ich einfach manuell dar, wie mein Gitterobjekt ist. – datageek
'a',' b' und 'c' sind' data.tables'. Sie wollen eine 3x3-Matrix, in der jedes Element zwei 'data.tables' enthält? Warum willst du das? Sie sagen, dass Sie 'foverlaps' verwenden möchten. Kannst du erklären wie? Kannst du die gewünschte Ausgabe von nur einem Element deines Grids zeigen? – nicola