r语言 - Filter dataframe:提取只有一列符合条件的行



我试图过滤一个数据框架,看起来像下面的一个。我想提取只有一个的基因该基因在Day05至Day28范围内的day值小于0.01。我尝试使用filter_at(),但我只能根据any_vars()或all_vars()进行过滤。如果有人能帮忙,我将不胜感激。


Gene      Day02        Day05        Day07         Day10        Day14        Day21        Day28        Day42
a          1.523292e-05 7.393226e-03 4.854668e-10  2.810098e-01 5.136247e-02 3.933508e-01 6.911352e-03 6.667379e-03
Adh        4.942919e-13 7.805973e-02 2.085311e-02  1.077458e-06 1.893881e-06 8.745486e-01 9.475482e-01 7.175556e-10
bib        3.278391e-05 8.039599e-01 6.316572e-01  3.237931e-04 7.962826e-06 2.714483e-01 9.493604e-01 6.805985e-03

数据中的零行反映了这个条件:

subset(dat, select = Day05:Day28) <= 0.01
#   Day05 Day07 Day10 Day14 Day21 Day28
# 1  TRUE  TRUE FALSE FALSE FALSE  TRUE
# 2 FALSE FALSE  TRUE  TRUE FALSE FALSE
# 3 FALSE FALSE  TRUE  TRUE FALSE FALSE
rowSums(subset(dat, select = Day05:Day28) < 0.01)
# 1 2 3 
# 3 2 2 

表示在第1行有三个这样的值,在第2行和第3行有两个。

然而,我将使用0.005代替,我们找到了一些东西。

基地R

lim <- 0.005
dat[rowSums(subset(dat, select = Day05:Day28) < lim) == 1, ]
#   Gene        Day02       Day05        Day07     Day10      Day14     Day21       Day28       Day42
# 1    a 1.523292e-05 0.007393226 4.854668e-10 0.2810098 0.05136247 0.3933508 0.006911352 0.006667379

dplyr

library(dplyr)
dat %>%
filter(., rowSums(select(., Day05:Day28) < lim) == 1)
#   Gene        Day02       Day05        Day07     Day10      Day14     Day21       Day28       Day42
# 1    a 1.523292e-05 0.007393226 4.854668e-10 0.2810098 0.05136247 0.3933508 0.006911352 0.006667379

最新更新