如何对mutliple列进行累积逻辑运算

Dar*_*ook 6 r xts

我在xts对象中有多个列,我想在第一列中找到一定数量以上的百分比,在第一列或第二列中高于某个数字的百分比,前三列中任何一列中的百分比超过一定数量等

我目前正在手动执行此操作,如下所示:

library(xts)
set.seed(69) 
x = xts( cbind( v.1 = runif(20)*100,  v.2 = runif(20)*100,   v.3 = runif(20)*100,   v.4 = runif(20)*100), Sys.Date()-20:1 )

c(
  mean( x$v.1 > 50),
  mean( x$v.1 > 50 | x$v.2 > 50) ,
  mean( x$v.1 > 50 | x$v.2 > 50 | x$v.3 > 50) ,
  mean( x$v.1 > 50 | x$v.2 > 50 | x$v.3 > 50 | x$v.4 > 50)
  )
Run Code Online (Sandbox Code Playgroud)

这给出了这个示例输出:

[1] 0.50 0.70 0.80 0.95
Run Code Online (Sandbox Code Playgroud)

但现在我要推广到任意数量的列,而不仅仅是v.1v.4.所以我正在寻找一个像这样的单一函数:

this_is_mean( x, c('v.1','v.2','v.3','v.4'), 50)
Run Code Online (Sandbox Code Playgroud)

或者它看起来像:

mean ( foo( x, c('v.1','v.2','v.3','v.4'), 50) )
Run Code Online (Sandbox Code Playgroud)

(当然,我将paste('v',1:N,sep='.')用于列名)

Jos*_*ich 3

这是另一种替代方案,它似乎比 @AnadaMahto 的解决方案(在此示例中)更快一些。您可能还会发现它更简单一些。

R> rowMeans(apply(x > 50, 1, cumsum) >= 1)
 v.1  v.2  v.3  v.4 
0.50 0.70 0.80 0.95
Run Code Online (Sandbox Code Playgroud)

但请注意,rowMeans只传递一次数据。与 不同mean,它进行了 2 次传递(一次用于浮点算术纠错)。