2017-05-08 3 views
1

Ich habe zwei Datenrahmen. Ihre Längen unterscheiden sich.Box Plot mit verschiedenen Spalten variabler Länge s/w zwei Datenrahmen

df1: 
Samples Number 
A9GS  73 
A9GY  142 
ASNO  327 
A5UE  131 

df2: 
Samples Number 
AUFS  107 
A9JY  42 
AKNO  32 
A9FE  111 
A9GY  12 
ADNO  37 
A2KE  451 

Ich habe Wilcoxon Test auf diesem durchgeführt.

wilcox.test(df1$Number,df2$Number, correct=FALSE) 

Das gab mir p-Wert. Und um dies zu visualisieren, habe ich die Box-Plot-Funktion verwendet und einen Fehler wie folgt gegeben.

boxplot(df1$Number ~ df2$Number, xlim=c(0.5,3)) 
Error in model.frame.default(formula = df1$Number ~ df2$Number) : 
    variable lengths differ (found for 'df2$Number') 

Kann jemand meinen Fehler korrigieren und mir auch sagen, wie man p-Wert auf der Handlung erhält. Danke

Antwort

1

Sie wären nur in der Lage, die Formel zu verwenden, wenn es eine 1-1 Paarung von diesen zu Datenrahmen gab (mit dem RHS normalerweise eine Gruppenvariable eher als eine numerische), die es offenbar nicht gibt. Sie müssen das Listenübermittlungssystem anstelle der Formel 1 verwenden. Ich werde sehen, ob ich ein funktionierendes Beispiel konstruieren kann.

png(); boxplot(list(df1_N=df1$Number, df2_N = df2$Number)); dev.off() 

enter image description here

Und Anmerkung kann mit der text Funktion erfolgen, die mit bquote typischerweise konstruiert ein ?plotmath Argument akzeptiert:

Das Grundstück ist mit erreicht.

text(1.5, 400, 
    label=bquote( 
     p~value == .(wilcox.test(df1$Number,df2$Number, correct=FALSE)$p.value) 
    )) 

Wenn Sie die p-Wert verwenden round(...) um den Ausdruck in der .( ) -function

+0

Fehler bei wilcox.test.default (df1_N = df1 $ Anzahl, df2_N = df2 $ Anzahl, richtig = FA LSE): Argument "x" fehlt, ohne Standard – raju

+0

Sie haben vergessen, die beiden Argumente in eine Liste zu setzen. –

+0

ok. Es funktionierte. danke – raju

0

Setzen Sie einfach die beiden Datenrahmen zusammen, und fügen Sie den p-Wert auf dem Grundstück abzurunden wollte:

df1 <- data.frame(samples = c('A9GS', 'A9GY', 'ASNO', 'ASUE'), 
         number = c(73, 142, 327, 131)) 
df2 <- data.frame(samples=c('AUFS', 'A9JY', 'AKNO', 'A9FE', 'A9GY', 'ADNO', 
           'A2KE'), 
         number = c(107, 42, 32, 111, 12, 37, 451)) 

df1$group <- 'df1' 
df2$group <- 'df2' 

df <- rbind(df1, df2) 

m<-wilcox.test(df1$number,df2$number, correct=FALSE) 

library(ggplot2) 
jpeg('path/to/where/you/want/the/file/saved/picture.jpeg') 
ggplot(df, aes(x=group, y=number, group=group)) + 
    geom_boxplot() + 
    annotate('text', label=paste('p =', round(m$p.value, 2)), x=.5, y=400) 
dev.off() 

ergibt: enter image description here

+0

Danke. Mein df1 hat 70 Samples und df2 ist 258. Wie kann ich solch ein riesiges Plot speichern? – raju

+0

Ich möchte auch sehen, welche Datenrahmen df1 oder df2 auf x-Achse im Boxplot – raju

+0

Ich habe meine Antwort zu Code enthalten, der das Bild speichern und die Dataframe-Namen auf der X-Achse schreiben wird. – triddle

Verwandte Themen