【问题标题】:Filter dataframe: extract rows with only one column that meets condition过滤数据框:提取只有一列满足条件的行
【发布时间】:2021-10-15 23:14:49
【问题描述】:

我正在尝试过滤如下所示的数据框。我想提取该基因在 Day05 到 Day28 范围内只有一天的值小于 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

【问题讨论】:

  • Stack 标签推荐引擎不完善,请注意您使用的标签。在这种情况下,rstudio 不正确,因为这与 IDE 本身无关(只是编程语言)。

标签: r dataframe dplyr


【解决方案1】:

数据中的零行反映了这种情况:

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 行有 3 个这样的值,第 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    • 2017-09-15
    • 1970-01-01
    • 2021-10-20
    相关资源
    最近更新 更多