我试图过滤一个数据框架,看起来像下面的一个。我想提取只有一个的基因该基因在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