2016-05-03 6 views
1

Meine Datenrahmen wie das, was ichConditional subsetting von Datenrahmen zu halten vorherige Zeile

 Model   w0  p0   w1   p1  w2  p.value 

1 Null_model 3.950000e-05 0.7366921 0.988374029 0.000000e+00 1.296464 
2  alt_test 1.366006e-02 0.4673263 0.139606503 3.049244e-01 1.146653 
3  alt_ref 2.000000e-07 0.4673263 0.000846849 3.049244e-01 1.635038 5.550000e-15 

8 Null_model 2.790000e-05 0.7240479 0.987016439 0.000000e+00 1.263556 
9  alt_test 7.550000e-09 0.7231176 0.991768899 1.060000e-13 1.369259 
10  alt_ref 2.770000e-05 0.7231176 0.995373167 1.060000e-13 1.192839 3.073496e-01 

      ...  ...   ...   ...   ...  ...  ... 

sehen will, ist meine data.frame in eine Art und Weise der Teilmenge, die jeden Fall, in den p.value < 0.05 hält, aber es hält auch die vorherigen Zeilen dieses Fälle.

So ideal mein Ausgang so etwas wie dieses

 Model  w0   w1  w2 
2 alt_test 1.4e-0.2 0.139606503 1.146653 
3 alt_ref 2.00e-07 0.000846849 1.635038 

sein Ich habe das versucht, folgende, aber es funktioniert nicht ganz richtig:

Teilmenge (v, p.value < 0,05 , select = c (Modell, w0, w1, w2))

Die Ausgabe hat nicht die Zeile alt_test.

Ich habe auch versucht

mit (v, ifelse (p.value < 0,05, paste (dplyr :: liegt (c (w0, w1, w2), 1)), ""))

und der Ausgang in diesem Fall sieht aus wie

[1] NA   NA   NA   NA   "0.013660056" NA   NA   NA   NA   ""   
[11] NA   NA   NA   NA   ""   NA   NA   NA   NA   ""   
[21] NA   NA   NA   NA   ""   NA   NA   NA   NA   ""   
[31] NA   NA   NA   NA   ""   NA   NA   NA   NA   ""   
[41] NA   NA   NA   NA   ""   NA   NA   NA   NA   ""   
[51] NA   NA   NA   NA   "1.34e-11" NA   NA   NA   NA   "" ...  

ich habe auch versucht

Teilmenge (v, p.value < 0,05, select = C (w0, w1, w2, w0-1, W1-1, W2-1))

aber dies gibt die vorherige Spalte, so dass ich fragte sich, ob etwas Ähnliches frühere Zeilen stattdessen geben könnte?

Danke

+0

Try 'w = die (mit (DF , mein Zustand)); DF [rep (w, jeweils = 2) -1: 0, my_cols] ' – Frank

+0

@Rafael Ich sehe nicht, warum das data.table-Tag hier hinzugefügt werden sollte. – Frank

+0

@Frank, es ist nicht unbedingt notwendig, aber es hilft, die Aufmerksamkeit von Leuten zu bekommen, die 'data.table' verwenden, was ziemlich praktisch für die Datenmanipulation ist und ich weiß, dass es möglich ist, diese Frage mit' data.table' –

Antwort

0

Wenn immer Ihre data.frame Struktur wie alt_test und alt_ref abwechselnd hat, dann können Sie manuell die Teilmenge Index wie unten konstruieren:

library(data.table) 
setDT(myDf) 
myDf[Reduce(function(x,y) ifelse(!is.na(x), x, ifelse(!is.na(y), y, F)), 
    shift(p.Value < 0.05, n = 0:1, type = "lead")), .(Model,w0,w1,w2)] 
+0

Danke das hat funktioniert! Noch eine Frage; wenn ich auch die Null_model-Zeile bekommen möchte, wie würde ich das so? Ich habe versucht, die Werte von n = zu ändern, aber das scheint nicht den Trick zu machen. Irgendwelche Vorschläge? – Hia3

+0

Sie können eine 'oder' Bedingung in der Schicht hinzufügen, um die Reihe einzeln auszuwählen. 'myDf [Reduzieren (Funktion (x, y) ifelse (! is.na (x), x, ifelse (! is.na (y), y, F)), Verschiebung (p.Value <0.05 | Model = = "Null_Model", n = 0: 1, type = "lead")),. (Model, w0, w1, w2)] ' – Psidom

+0

Ich meinte, wenn p.value <0,05 wäre, würde ich gerne das Null_model zurückgeben, alt_ref & alt_test Zeilen. Also habe ich 'myDf [Reduce (Funktion (x, y) iffelse (! Is.na (x), x, ifelse (! Is.na (y), y, F)), Verschiebung (p.Value <0,05, ** n = 0: 2 **, type = "lead")),. (Modell, w0, w1, w2)] 'aber das gibt nicht alle 3 Zeilen zurück. – Hia3

Verwandte Themen