gpt4 book ai didi

r - 在 R 中,我可以过滤至少 1 个值满足阈值的所有列

转载 作者:行者123 更新时间:2023-12-04 08:21:24 24 4
gpt4 key购买 nike

您好,这是我的第一篇文章-(不确定我是打算在这里发帖还是在 github 上发帖)。我对这一切都很陌生。
我想保留至少一个值高于我设置的截止值(在这种情况下为 2)的行。我已经在我的示例中实现了这一点(分子 d 被删除),但我想有更好的方法,尤其是如果我有很多样本。
有没有办法选择除第一列之外的所有列并应用于表格的其余部分?
我试图通过删除所有样本中较低的内容来清理我的数据。
我认为通过删除所有低于 2 的行可以获得相同的结果?

> marker = c('a','b','c','d','e')
> sample1 = c(100,55,43,1.5,89)
> sample2 = c(98,45,22,1,0.5)
> sample3 = c(89,45,65,0.5,67)
> data = data.frame( 'Molecule' = marker, 'sam1' = sample1, 'sam2'= sample2, 'sam3' = sample3)
> data
Molecule sam1 sam2 sam3
1 a 100.0 98.0 89.0
2 b 55.0 45.0 45.0
3 c 43.0 22.0 65.0
4 d 1.5 1.0 0.5
5 e 89.0 0.5 67.0

> limit = 2
> data %>% filter(.[2] >limit | .[3] > limit | .[4] > limit)
Molecule sam1 sam2 sam3
1 a 100 98.0 89
2 b 55 45.0 45
3 c 43 22.0 65
4 e 89 0.5 67
谢谢

最佳答案

filter_at ,这是可以做到的。在新版dplyr ,还有across ,但它会寻找 all而不是 any ( | )。指定感兴趣的列,如果列名模式都是 starts_with 'sam',遍历这些,将逻辑表达式包装在 any_vars

library(dplyr)
data %>%
filter_at(vars(starts_with('sam')), any_vars(. > limit))
-输出
#    Molecule sam1 sam2 sam3
#1 a 100 98.0 89
#2 b 55 45.0 45
#3 c 43 22.0 65
#4 e 89 0.5 67

或者用 rowSums 创建一个逻辑向量在 base R
data[rowSums(data[startsWith(names(data), 'sam')] > limit) > 0,]

关于r - 在 R 中,我可以过滤至少 1 个值满足阈值的所有列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65483056/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com