【问题标题】:How to filter any variables greater than a value in a data.frame in R?如何过滤任何大于 R 中 data.frame 中的值的变量?
【发布时间】:2021-03-03 16:15:45
【问题描述】:

我确信这是一个非常简单的问题,我很沮丧我无法解决它。 我有一个看起来像这样的 data.frame (df)

    df <- data.frame("genus" = c("a","b","c","d","e", "f"),
                 "Kit1" =c(0,0,0,102, 10, 2),
                 "Kit2" = c(3,2,0,105,11, 12),
                 "Kit3" = c(1,20,310,102,1,99),
                 "Kit4" = c(0,0,0,190,4,0))
>df
      genus Kit1 Kit2 Kit3 Kit4
1     a    0    3    1    0
2     b    0    2   20    0
3     c    0    0  310    0
4     d  102  105  102  190
5     e   10   11    1    4
6     f    2   12   99    0

我想过滤所有包含 >100 个计数的行。

filter_all(all_vars(.>100) # filters all rows, that contain >100 counts, 

在我的例子中,只有“d”属被保留,其他所有内容都被丢弃,“c”属也被丢弃,尽管这里 Kit3 显示了 310 个计数。

如果我使用

filter_all(any_vars(.>100) # nothing happens, although for my understanding this would be the correct command

我想保留超过最小 1 x 100 计数的所有行。

我不知道为什么,但我对这个简单的问题有点迷茫。

你会帮我很多的:) 期待您的帮助! 凯瑟琳

【问题讨论】:

    标签: r dataframe filter


    【解决方案1】:

    我们可以使用if_any(来自 dplyr -version >= 1.0.4)

    library(dplyr)
    df %>% 
      filter(if_any(starts_with('Kit'), ~ . > 100))
    

    -输出

    #    genus Kit1 Kit2 Kit3 Kit4
    #1     c    0    0  310    0
    #2     d  102  105  102  190
    

    如果所有 'Kit' 列的值都应 > 100,请使用 if_all

    df %>% 
      filter(if_all(starts_with('Kit'), ~ . > 100))
    

    如果版本较旧,可以使用 filter_atany_vars(已弃用)

    df %>%
        filter_at(vars(starts_with("Kit")), any_vars(. > 100))
    

    【讨论】:

    • 当我尝试这个时,我收到一个错误,它告诉我它不知道 if_any(),尽管 dplyr 已加载。错误:filter() 输入 ..1 有问题。 x 找不到函数“if_any” i 输入 ..1if_any(contains("Kit"), ~. &gt; 100)。运行rlang::last_error() 以查看错误发生的位置。也许需要cross()-fct?!
    • @Kathrin 你能检查一下你的packageVersion('dplyr')。我用1.0.4
    • @Kathrin 如果你有旧版本,那么df %&gt;% filter_at(vars(starts_with("Kit")), any_vars(. &gt; 100)) 应该可以工作,但它可能会被弃用
    • 我更新了我的版本,现在可以使用了 :) 非常感谢您的帮助!
    猜你喜欢
    • 2011-06-30
    • 2016-06-21
    • 1970-01-01
    • 2020-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 2016-08-23
    相关资源
    最近更新 更多