我有一个包含维度列和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
答案 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