2016-01-22 45 views
1

我需要与所有先前的元素i-1,i-2,...,if i < i-1, i-2, ...返回1比较元件i,否则返回0确定是否每个向量元素不超过以前所有元件

data <- c(10.3,14.3,7.7,15.8,14.4,16.7,15.3,20.2,17.1,7.7,15.3,16.3,19.9,14.4,18.7,20.7) 

比较应该是以下的结果。

0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

我试着用

as.integer(cummin(data)==data) 

,使之与我得到

1 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 

的第一要素容易修复。但如何处理另一个10号位。

+2

这是做的一个非常明确的方式:'sapply (1:length(data),function(i)all(data [i] toldo

回答

2

试试这个:

sapply(1 : length(data), FUN = function(i) all(data[i] < data[1 : (i - 1)]) * 1) 

#[1] 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 
4

一种可能的方法:

v <- rank(data,ties='first') 
out <- as.integer(cummin(v)==v) 
# [1] 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 

考虑的第一要素护理:

out[1] <- 0 
+1

不错,但我认为领先的'1'应该是'0' –

相关问题