Ich habe einen Datenrahmen mit mehreren Spalten. die relevanten drei sind chr
, pos
und ratio
. Ich möchte ddply
zu ksmooth
basierend auf chr
(Chromosom) verwenden, aber immer wieder einen falschen Datenrahmen mit vielen NA
Werte bekommen. Hier ist mein reproduzierbarer Datenrahmen:ddply to ksmooth Funktion
d=data.frame(chr=c(rep.int(1,24),rep.int(2,15),rep.int(3,30),rep.int(4,20),rep.int(5,11)),
pos=c(sort(sample(1:1000, size = 24, replace = FALSE),decreasing = FALSE), sort(sample(1:1000, size = 15, replace = FALSE),decreasing = FALSE), sort(sample(1:1000, size = 30, replace = FALSE),decreasing = FALSE), sort(sample(1:1000, size = 20, replace = FALSE),decreasing = FALSE), sort(sample(1:1000, size = 11, replace = FALSE),decreasing = FALSE)),
ratio=seq(1:100))
und ddply
Funktion
f <- ddply(d, .(chr),
function(e) {
as.data.frame(ksmooth(e$pos,e$ratio,"normal",bandwidth=10))
})
Offensichtlich mache ich etwas falsch.
Danke für die Hilfe, Guy
Dank Zheyuan, aber NOP, ich möchte jede Position (das wäre eine SNP-Position auf der x-Achse) gegen einige Verhältnis Variable (y-Achse), aber dies für jede unabhängige chr tun. So wie es jetzt ist, bekomme ich 500 Zeilen statt der erwarteten 100 als ursprünglichen Datenrahmen – Guy
yap du hast Recht, die Bandbreite ist falsch, aber das ist nicht mein Hauptproblem. Das Problem ist, dass die Ausgabe 500 Einträge statt 100 (für dieses Beispiel) hat. Was die zweite Frage betrifft, bin ich mir nicht sicher, ob ich sie verstanden habe, aber ich möchte ksmooth, um pos als x und ratio als y zu nehmen, und ddply, um sie auf jeden chr anzuwenden. Hoffe, es ist ein bisschen klarer. – Guy