请参阅函数 all() 和 any() 分别获取问题的第一部分和第二部分。 apply() 函数可用于在行或列上运行函数。 (MARGIN = 1 是行,MARGIN = 2 是列,等等)。请注意,在进行比较时,我在 df[, -1] 上使用 apply() 来忽略 id 变量。
第 1 部分:
> 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
第 2 部分:
> 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 如果 all输入向量的元素是 TRUE 和 FALSE 否则。any() 返回 TRUE 如果输入中的元素 任何 是 TRUE 和 FALSE 如果都是 @987654341 @。
然后我使用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(如上所示)。