使用R筛选任何列中值至少小于0.001的行

使用R筛选任何列中值至少小于0.001的行,r,dataframe,subset,R,Dataframe,Subset,我有这个数据集,我想过滤至少满足一个要求的行,在padj的任何列(padj.1、padj.2等)中至少有一个小于0.001的值 这是期望的输出 log2FoldChange padj log2FoldChange.1 padj.1 log2FoldChange.2 padj.2 log2FoldChange.3 padj.3 AT1G01060 0.047175423 9.998981e-01 -0.144865979

我有这个数据集,我想过滤至少满足一个要求的行,在padj的任何列(padj.1、padj.2等)中至少有一个小于0.001的值

这是期望的输出

  log2FoldChange         padj log2FoldChange.1        padj.1 log2FoldChange.2       padj.2 log2FoldChange.3       padj.3
AT1G01060      0.047175423 9.998981e-01     -0.144865979  8.393350e-01      0.164981232 2.485552e-01     -0.349949093 4.481910e-04
AT1G01120      0.103551581 9.998981e-01     -0.318902875  3.272385e-01      0.234447384 3.078595e-01     -0.683988096 1.880000e-08
AT1G01140     -0.005671191 9.998981e-01     -0.313300814  2.749158e-01     -1.053242873 2.890000e-18      1.185748730 3.650000e-26
AT1G01260      0.471038145 9.998981e-01      1.528887763  1.200000e-18     -0.346919177 1.656233e-01     -0.810355958 2.440000e-07

问候和感谢

我们可以在处使用
filter\u和
dplyr
。如果有行名称,则最好在删除行名称后进行管道处理之前将其作为单独的列添加

library(tidyverse)
df1 %>%
    rownames_to_column('rn') %>%
    filter_at(vars(matches("padj")), any_vars(. < 0.001))
#     rn log2FoldChange      padj log2FoldChange.1       padj.1 log2FoldChange.2       padj.2 log2FoldChange.3      padj.3
#1 AT1G01060    0.047175423 0.9998981       -0.1448660 8.393350e-01        0.1649812 2.485552e-01       -0.3499491 4.48191e-04
#2 AT1G01120    0.103551581 0.9998981       -0.3189029 3.272385e-01        0.2344474 3.078595e-01       -0.6839881 1.88000e-08
#3 AT1G01140   -0.005671191 0.9998981       -0.3133008 2.749158e-01       -1.0532429 2.890000e-18        1.1857487 3.65000e-26
#4 AT1G01260    0.471038145 0.9998981        1.5288878 1.200000e-18       -0.3469192 1.656233e-01       -0.8103560 2.44000e-07
库(tidyverse)
df1%>%
行名到列('rn')%>%
过滤器(变量(匹配项(“padj”)),任何变量(.<0.001))
#rn log2FoldChange padj log2FoldChange.1 padj.1 log2FoldChange.2 padj.2 log2FoldChange.3 padj.3
#1 AT1G01060 0.047175423 0.9998981-0.1448660 8.393350e-01 0.1649812 2.485552e-01-0.3499491 4.48191e-04
#2 AT1G01120 0.103551581 0.9998981-0.3189029 3.272385e-01 0.2344474 3.078595e-01-0.6839881 1.88000e-08
#3 AT1G01140-0.005671191 0.9998981-0.3133008 2.749158e-01-1.0532429 2.890000e-18 1.1857487 3.65000e-26
#4 AT1G01260 0.471038145 0.9998981 1.5288878 1.200000e-18-0.3469192 1.656233e-01-0.8103560 2.44000e-07

我认为您可以使用哪个函数来完成此操作

试试这个,它对我有用:

i = which((data$padj.1 > 0.001) | (data$padj.2 > 0.001)|(data$padj.3 > 0.001) )
data[i,]

您不需要
which()
,因为您可以使用逻辑向量和数字向量对data.frame进行索引如果我要筛选所有大于0.05的行,这是否有效<代码>d%>%过滤器(跨越(1:5,~.x>0.05))
@RamakrishnaS你能以问题的形式发布吗
i = which((data$padj.1 > 0.001) | (data$padj.2 > 0.001)|(data$padj.3 > 0.001) )
data[i,]