r语言 - 如何筛选至少一列大于阈值的行



我有一个数据

Name    Clust1     Clust2     Clust3
AA    0.0662421  0.01742827 0.02286026
BB    0.7694628  0.03241972 0.02935754
CC    0.1099033  0.52170750 0.28385905
DD    0.2769453  0.30376152 0.24822205

我想过滤至少一列大于 0.50 的行。

我正在尝试以下命令:

new.df <- df %>% mutate(confident = ifelse(rowSums(.[,c(1:4)] >= 0.5)>0, 'yes', 'no'))

我收到以下警告,没有任何输出:

Warning message:
In Ops.factor(left, right) : ‘>=’ not meaningful for factors

我希望以下数据框:

    Name    Clust1     Clust2     Clust3
    BB    0.7694628  0.03241972 0.02935754
    CC    0.1099033  0.52170750 0.28385905

您是否知道如何修复我的代码以获得所需的输出。谢谢

我们可以直接使用rowSums

df[rowSums(df[2:4] >= 0.5) > 0, ]
#  Name  Clust1  Clust2   Clust3
#2   BB 0.76946 0.03242 0.029358
#3   CC 0.10990 0.52171 0.283859

或者dplyr带有filter_atany_vars的版本

library(dplyr)
df %>%
  filter_at(vars(starts_with("Clust")), any_vars(. >= 0.5))

就修复您的代码而言,如@thelatemail所述,您将在第 rowSums 1 列中包含第 1 列,这是Name列,因此您希望将其子集化在第 2:4 列上。我们也可以直接filter而不是用 mutate 创建新变量,所以以下内容应该有效。

df %>% filter(rowSums(.[,c(2:4)] >= 0.5) > 0)

我们还可以使用apply版本,这对于较大的数据集来说会很慢

df[apply(df[2:4] >= 0.5, 1, any), ]

最新更新