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

时间:2015-01-27 21:30:33

标签: r dataframe apply

我有一个包含维度列和4个值列的数据框。如何对列进行子集,使得每个记录的所有4列都小于给定的x?我知道我可以使用子集手动执行此操作并为每列指定条件,但有没有办法使用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

1 个答案:

答案 0 :(得分:1)

您可以将否定的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