Условное подмножество фрейма данных с сохранением предыдущей строки
Мой фрейм данных выглядит так
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
... ... ... ... ... ... ...
То, что я хочу, это подмножество data.frame
таким образом, что сохраняет каждый случай, когда p.value < 0.05
но он также сохраняет предыдущие строки в этих случаях.
Так что в идеале мой вывод будет примерно таким
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
Я пробовал следующее, но это не работает правильно:
подмножество (v, p.value < 0,05, select = c(модель,w0,w1,w2))
вывод не имеет строки alt_test.
Я также пытался
с (v, ifelse(p.value < 0,05, вставьте (dplyr::lag(c(w0,w1,w2),1)), ""))
и вывод в этом случае выглядит
[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 "" ...
Я тоже пробовал
подмножество (v, p.value < 0,05, select = c(w0, w1,w2, w0-1, w1-1, w2-1))
но это дает предыдущий столбец, поэтому мне было интересно, если что-то подобное может дать вместо предыдущих строк?
Спасибо
1 ответ
Если ваш data.frame всегда имеет чередующуюся структуру как alt_test
а также alt_ref
, затем вы можете вручную построить индекс подмножества, как показано ниже:
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)]