请查看函数
all()
和
any()
,分别回答你问题的第一部分和第二部分。可以使用
apply()
函数在行或列上运行函数(
MARGIN=1
是行,
MARGIN=2
是列等等)。请注意,在进行比较时,我使用
apply()
在
df[, -1]
上忽略了
id
变量。
> df <- data.frame(id=c(1:5), v1=c(0,15,9,12,7), v2=c(9,32,6,17,11))
> df[apply(df[, -1], MARGIN = 1, function(x) all(x > 10)), ]
id v1 v2
2 2 15 32
4 4 12 17
第二部分:
> df[apply(df[, -1], MARGIN = 1, function(x) any(x > 10)), ]
id v1 v2
2 2 15 32
4 4 12 17
5 5 7 11
为了查看发生了什么,
x > 10
对于每一行返回一个逻辑向量(通过
apply()
),指示每个元素是否大于10。
all()
如果输入向量的所有元素都是
TRUE
则返回
TRUE
,否则返回
FALSE
。如果输入中有任何一个元素为
TRUE
,则
any()
返回
TRUE
,如果所有元素都是
FALSE
,则返回
FALSE
。我随后使用来自
apply()
调用的逻辑向量。
> apply(df[, -1], MARGIN = 1, function(x) all(x > 10))
[1] FALSE TRUE FALSE TRUE FALSE
> apply(df[, -1], MARGIN = 1, function(x) any(x > 10))
[1] FALSE TRUE FALSE TRUE TRUE
对数据框 df
进行子集取值(如上所示)。
all(row[-1] > 10)
而不是考虑id
列。或者在df[-1]
上应用该函数。 - flodel