子集数据框,使每行中的所有值都小于某个值

Subset dataframe such that all values in each row are less than a certain value

我有一个包含维度列和 4 个值列的数据框。如何对列进行子集化,使每条记录的所有 4 列都小于给定的 x?我知道我可以使用 subset 手动执行此操作并为每一列指定条件,但是有没有办法使用 apply 函数来执行此操作? 下面是一个示例数据框。例如,假设 x 为 0.7。在那种情况下,我想消除该行的任何列大于 0.7 的任何行。

   zips ABC DEF GHI JKL
1     1 0.8 0.6 0.1 0.6
2     2 0.1 0.3 0.8 1.0
3     3 0.5 0.1 0.4 0.8
4     4 0.6 0.4 0.2 0.3
5     5 1.0 0.8 0.6 0.5
6     6 0.2 0.7 0.3 0.4
7     7 0.3 1.0 1.0 0.2
8     8 0.7 0.9 0.5 0.1
9     9 0.9 0.5 0.9 0.7
10   10 0.4 0.2 0.7 0.9

下面的函数似乎可以工作,但是有人可以解释一下这里的逻辑吗?

Variance_Percentile[!rowSums(Variance_Percentile[-1] > 0.7), ]
  zips ABC DEF GHI JKL
4    4 0.6 0.4 0.2 0.3
6    6 0.2 0.7 0.3 0.4

您可以对子集

使用取反的rowSums()
df[!rowSums(df[-1] > 0.7), ]
#   zips ABC DEF GHI JKL
# 4    4 0.6 0.4 0.2 0.3
# 6    6 0.2 0.7 0.3 0.4
  • df[-1] > 0.7 给了我们一个逻辑矩阵告诉我们哪些 df[-1] 大于 0.7
  • rowSums() 这些行的总和(每个 TRUE 值等于 1,FALSE 为零)
  • ! 将这些值转换为逻辑值并将它们求反,以便我们得到任何为零 (FALSE) 的行总和并将它们变为 TRUE。换句话说,如果 rowSums() 结果为零,我们需要这些行。
  • 我们将该逻辑向量用于行子集

获得相同逻辑向量的另一种方法是

rowSums(df[-1] > 0.7) == 0