首页 文章

保留前一行的数据帧的条件子集

提问于
浏览
1

我的数据框看起来像这样

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

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

我想要的是以一种将每个案例保持在 p.value < 0.05 的方式对我的 data.frame 进行子集化,但它也保留了前一行到这些情况 .

理想情况下,我的输出将是这样的

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

我尝试了以下但是它不能正常工作:

subset(v,p.value <0.05,select = c(Model,w0,w1,w2))

输出没有alt_test行 .

我也试过了

with(v,ifelse(p.value <0.05,paste(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 . 值<0.05,select = c(w0,w1,w2,w0-1,w1-1,w2-1))

但是这给了前面的专栏,所以我想知道类似的东西是否能给出前一行呢?

谢谢

1 回答

  • 0

    如果您的data.frame始终具有交替结构 alt_testalt_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)]
    

相关问题