Ich denke, das ist eher ein dplyr
als plyr
Frage. Der Geschwindigkeit wegen verwende ich data.table
in irgendeinem Code, den ich geschrieben habe. Während eines Zwischenschritts habe ich eine Tabelle mit einigen genomics Daten mit ~ 32.000 Zeilen:Kann ich diese dplyr + data.table-Aufgabe schneller machen?
> bedbin.dt
Source: local data table [32,138 x 4]
Groups: chr
bin start site chr
1 2 3500000 ssCTCF 1
2 3 4000000 ssCTCF+Cohesin 1
3 3 4000000 ssCTCF 1
4 4 4500000 ucCTCF 1
5 4 4500000 ssCTCF+Cohesin 1
6 4 4500000 ssCTCF+Cohesin 1
7 4 4500000 ssCTCF+Cohesin 1
8 4 4500000 ssCTCF 1
9 4 4500000 ssCTCF 1
10 5 5000000 ssCTCF 1
.. ... ... ... ...
EDIT
oder die ersten hundert Zeilen von Daten wie so (THX zu Ricardo Saporta für Anweisungen)
bedbin.dt <- data.table(structure(list(bin = c("2", "3", "3", "4", "4", "4", "4", "4","4", "5", "5", "7", "7", "7", "7", "7", "7", "8", "8", "9", "9","11", "12", "14", "14", "14", "14", "14", "14", "14", "14", "15","15", "15", "15", "15", "15", "15", "15", "15", "15", "16", "16","17", "17", "17", "18", "20", "20", "20", "21", "21", "21", "21","21", "21", "21", "21", "21", "21", "22", "22", "5057", "5057","5057", "5057", "5059", "5059", "5059", "5059", "5059", "5060","5060", "5060", "5060", "5060", "5060", "5061", "5063", "5063","5064", "5064", "5064", "5064", "5064", "5064", "5064", "5064","5064", "5064", "5064", "5064", "5064", "5064", "5064", "5064","5064", "5064", "5064", "5064"), start = c(3500000L, 4000000L,4000000L, 4500000L, 4500000L, 4500000L, 4500000L, 4500000L, 4500000L,5000000L, 5000000L, 6000000L, 6000000L, 6000000L, 6000000L, 6000000L,6000000L, 6500000L, 6500000L, 7000000L, 7000000L, 8000000L, 8500000L,9500000L, 9500000L, 9500000L, 9500000L, 9500000L, 9500000L, 9500000L,9500000L, 10000000L, 10000000L, 10000000L, 10000000L, 10000000L,10000000L, 10000000L, 10000000L, 10000000L, 10000000L, 10500000L,10500000L, 11000000L, 11000000L, 11000000L, 11500000L, 12500000L,12500000L, 12500000L, 13000000L, 13000000L, 13000000L, 13000000L,13000000L, 13000000L, 13000000L, 13000000L, 13000000L, 13000000L,13500000L, 13500000L, 162500000L, 162500000L, 162500000L, 162500000L,163500000L, 163500000L, 163500000L, 163500000L, 163500000L, 164000000L,164000000L, 164000000L, 164000000L, 164000000L, 164000000L, 164500000L,165500000L, 165500000L, 166000000L, 166000000L, 166000000L, 166000000L,166000000L, 166000000L, 166000000L, 166000000L, 166000000L, 166000000L,166000000L, 166000000L, 166000000L, 166000000L, 166000000L, 166000000L,166000000L, 166000000L, 166000000L, 166000000L), site = c("ssCTCF","ssCTCF+Cohesin", "ssCTCF", "ucCTCF", "ssCTCF+Cohesin", "ssCTCF+Cohesin","ssCTCF+Cohesin", "ssCTCF", "ssCTCF", "ssCTCF", "ssCTCF+Cohesin","ssCTCF", "ssCTCF+Cohesin", "ssCTCF+Cohesin", "ssCTCF", "ucCTCF","ucCTCF", "ucCTCF", "ssCTCF", "ssCTCF", "ssCTCF+Cohesin", "ssCTCF","ssCTCF+Cohesin", "ssCTCF", "ucCTCF", "ucCTCF", "ssCTCF", "ssCTCF+Cohesin","ssCTCF", "ssCTCF+Cohesin", "ssCTCF+Cohesin", "ssCTCF+Cohesin","ssCTCF+Cohesin", "ssCTCF", "ucCTCF", "ssCTCF+Cohesin", "ssCTCF","ssCTCF", "ssCTCF", "ssCTCF", "ssCTCF", "ssCTCF", "ssCTCF", "ssCTCF","ssCTCF", "ssCTCF", "ucCTCF", "ucCTCF", "ucCTCF", "ssCTCF", "ssCTCF","ssCTCF", "ssCTCF", "ssCTCF+Cohesin", "ssCTCF", "ssCTCF", "ssCTCF","ssCTCF", "ssCTCF", "ssCTCF", "ssCTCF+Cohesin", "ucCTCF", "ssCTCF","ssCTCF+Cohesin", "ssCTCF+Cohesin", "ssCTCF", "ucCTCF", "ssCTCF","ssCTCF+Cohesin", "ssCTCF", "ssCTCF", "ucCTCF", "ucCTCF", "ssCTCF","ucCTCF", "ssCTCF", "ucCTCF", "ucCTCF", "ssCTCF", "ssCTCF", "ucCTCF","ucCTCF", "ssCTCF", "ssCTCF", "ssCTCF", "ucCTCF", "ucCTCF", "ssCTCF","ssCTCF", "ssCTCF", "ssCTCF", "ssCTCF", "ssCTCF", "ssCTCF", "ucCTCF","ucCTCF", "ssCTCF+Cohesin", "ucCTCF", "ucCTCF", "ucCTCF"), chr = structure(c(1L,1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 20L, 20L,20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L,20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L,20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L), .Label = c("1","10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2","3", "4", "5", "6", "7", "8", "9", "X"), class = "factor")), .Names = c("bin","start", "site", "chr"), sorted = "chr", class = c("data.table","data.frame"), row.names = c(NA, -100L)), key='chr')
END EDIT
ich möchte neben cre aß alle möglichen Kombinationen jeder Reihe gegen jede andere (gruppiert nach CHR). Dies würde eine Abfrage (Join) auf einige andere Daten bilden, damit ich am besten denke (und einfachste) vorauszuberechnen:
# grouped by chr column
bedbin.dt = group_by(bedbin.dt, chr)
# an outer like function
outerFun= function(dt)
{
unique(data.table(
x=dt[rep(1:nrow(dt),each =nrow(dt)),],
y=dt[rep.int(1:nrow(dt),times=nrow(dt)),]))
}
> system.time((outer.bedbin.dt = do(bedbin.dt, outerFun1)))
user system elapsed
90.607 13.993 105.536
Meiner Meinung nach ist dies sloooowwww ... obwohl relativ im Vergleich zur Verwendung data.frame
oder Base Funktionen wie by()
oder lapply()
ist es ziemlich viel schneller. Dies ist jedoch ein kleiner Datensatz, an dem ich ihn gerade teste.
Also ... Ich frage mich, ob jemand irgendwelche Ideen über eine schnellere Version von outerFun hat ??? Gibt es einen schnelleren Weg als rep()
oder rep.int()
?
hallo, können Sie bitte ein reproduzierbares Beispiel posten? - Sie können 'reproduce ()' verwenden. Anleitung gibt es hier: http://bit.ly/SORepro - [Wie man ein großartiges R reproduzierbares Beispiel macht] (http://bit.ly/SORepro) –
@RicardoSaporta, Hi ich bin mir nicht sicher wie ich das posten kann vollständig reproduzierbares Beispiel. Lass mich darüber nachdenken. Vielleicht kann ich Code erstellen, um es zuerst zu erstellen ?? Einen Moment bitte ... –
schauen Sie sich den Link an, den ich gepostet habe. Sie können einfach 'reproduzieren (bedbin.dt, rows = 100, cols = c (" bin "," start ", .. etc))' –