2017-01-24 8 views
0

Ich habe versucht, Werte von zwei Spalten, die verwandt sind (Diversifizierungsraten von mehreren Siter-Gruppen), zu probieren, aber ich habe keine Ahnung, wie es geht. Ich versuche mit sample Funktion, aber es begrenzt mich, so dass ich keine weitere Bedingung wählen kann.Beispiel Variablen aus zwei Spalten in R

df<-data.frame("M"=c(0.06,0.14,0.05,0.07), "H"=c(0.06,0.08,0.04,0.05)) 
    df 
#  M H 
# 1 0.06 0.06 
# 2 0.14 0.08 
# 3 0.05 0.04 
# 4 0.07 0.05 

    sample(df,size=1000,replace=TRUE) 

Wenn ich diesen Befehl verwenden, Resampling es Zeilen und Spalten:

 H M M.1 M.2 M.3 
1 0.06 0.06 0.06 0.06 0.06 
2 0.08 0.14 0.14 0.14 0.14 
3 0.04 0.05 0.05 0.05 0.05 
4 0.05 0.07 0.07 0.07 0.07 
... 

Aber ich will es nur Probe ein Wert aus jeder Zeile und gehen in die nächste Zeile mit der gleichen Bedingung, bis das Ende der Zeilen. Schließlich, wenn es keine weiteren Zeilen gibt, sollte es wieder von vorne beginnen bis size=1000, so dass ich einen Vektor der Länge 1000 haben kann.

Beispiel für was ich will (r = Zeile, c = Spalte)), 0.14 (R2C1), 0.05 (R3C1), 0.05 (R4C2), 0.06 (R1C2), 0.14 (R2C1), 0.03 (R3C2), 0.07 (R4C1) und so weiter.

Vielen Dank im Voraus für Ihre Hilfe!

EDITED:

Ich denke, dass das, was ich suche so etwas wie eine Loop-Funktion ist, aber ich weiß noch nicht, wie es zu tun.

Antwort

3

Sie sollten zuerst eine Indexierungsmatrix aus zwei Spalten erstellen (Zeilenindex und Spaltenindex) und dann die ursprüngliche Matrix indizieren.

idx <- matrix(c(rep(1:4,250), sample(1:2, 1000, replace=T)), ncol=2) 
res <- as.matrix(df)[idx] 
0

Mit Ihren Spezifikationen müssen Sie eine benutzerdefinierte Funktion verwenden.

Hier ist eine kleine Möglichkeit, es zu tun:

myfunc <- function(dataframe, nsamples = 1000){ 
    rows = ((0:nsamples)%%nrow(df)) + 1 #use the %% to get the row to sample 
    cols = sample(ncol(df), nsamples, replace = TRUE) #and the cols 
    sapply(1:nsamples, function(x){df[rows[x],cols[x]]}) #sapply to get as a vector 
} 
myfunc(df,10) 
[1] 0.08 0.05 0.07 0.06 0.08 0.05 0.05 0.06 0.08 0.05 
Verwandte Themen