这是我正在处理的数据集的可重现的小示例:
set.seed(123)
dat <- as.data.frame( cbind(a=1+round(runif(5), 2), b=round(rnorm(5), 2), high_cutoff=round(1+rnorm(5), 1)) )
数据框为:
a b high_cutoff
1.29 -1.69 2.3
1.79 1.24 -0.7
1.41 -0.11 2.7
1.88 -0.12 1.5
1.94 0.18 3.5
我正在尝试按行检查是否在前两列中至少有一个值比在第三列中的对应阈值高(例如,如果两个值中的任何一个都高,我想存储1截止)。
在示例中,我期望找到的是:
higher_than_cutoff
0
1
0
1
0
我一直在尝试使用以下(错误的)代码及其一些变体,但没有取得太大的成功:
higher_than_cutoff <- apply( dat[, c("a", "b")], 1, function(x) any(x > dat[, "high_cutoff"]) )
能否请您提供一些有关如何进行的建议?任何帮助都受到高度赞赏
这是一个可能的矢量化解决方案(如果可以的话,TRUE/FALSE
您可以+
一开始就删除它)
+(rowSums(dat[-3L] > dat[, 3L]) > 0)
## [1] 0 1 0 1 0
如果坚持apply
,可以做类似的事情
apply(dat, 1, function(x) +(any(x[-3] > x[3])))
## [1] 0 1 0 1 0
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句