您好,这是我的第一篇文章(不确定我是要在此处发布还是在 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
或者使用base R
中的rowSums
创建一个逻辑向量
data[rowSums(data[startsWith(names(data), 'sam')] > limit) > 0,]
关于r - 在 R 中,我可以过滤至少有 1 个值满足阈值的所有列吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65483056/