检查数据帧行中的至少一个值是否大于给定的行特定阈值

时间:2015-07-01 11:57:06

标签: r apply

这是我正在处理的数据集的一个可重复的小例子:

GetPartData()[0]

数据框是:

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)) )

我试图按行检查前两列中是否至少有一个值高于第三列中的correpondig阈值 (假设我想存储一个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

我一直在尝试使用以下(错误)代码及其中的一些变体,但没有取得多大成功:

   higher_than_cutoff         
0
1
0 
1
0

请您就如何继续提供一些建议? 任何帮助都非常感谢

4 个答案:

答案 0 :(得分:5)

这是一个可能的矢量化解决方案(如果你只使用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

答案 1 :(得分:5)

你可以尝试

 as.integer(do.call(pmax,dat[-3]) > dat[,3])
 #[1] 0 1 0 1 0

或者

((max.col(dat))!=3)+0L
  #[1] 0 1 0 1 0

答案 2 :(得分:3)

可以使用

获得所需的输出
higher_than_cutoff <- apply(dat,1,function(x) (max(x[1],x[2])>x[3])*1)

答案 3 :(得分:1)

也许我误解了你想要实现的目标,但是可以在不使用taskClassname = "org.jvnet.jaxb2_commons.xjc.XJC2Task" 的情况下获得所需的输出,我们只是比较完整的列向量,不需要行式操作。

apply