我的数据框架如下所示
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&lt; 0.05,select = c(Model,w0,w1,w2))
输出没有alt_test行。
我也试过
with(v,ifelse(p.value&lt; 0.05,paste(dplyr :: lag(c(w0,w1,w2),1)),&#34;&#34;))
,这种情况下的输出看起来像
[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&lt; 0.05,select = c(w0,w1,w2,w0-1,w1-1,w2-1))
但是这给了前一列,所以我想知道类似的东西是否可以给出以前的行呢?
谢谢
答案 0 :(得分:0)
如果您的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)]