从1和0的向量,如何只保留前0的前一个?

时间:2016-10-21 08:07:27

标签: r

要解析文本文件,我想在出现某个字符串后提取所有数字行。我设法提取文本。现在只选择在此文本后出现的数字行归结为这个小问题。从0和1的向量,我想只保留第一个0之前的那个。

a <- c(1,0,1)
b <- c(1,1,1,1,0,1,1,1,0,0,1)

函数f应返回:

f(a)
c(1,0,0)
f(b)
c(1,1,1,1,0,0,0,0,0,0,0)

我尝试使用

which.min(a)
[1] 2
which.min(b)
[1] 5

cumsum(!a)==0
[1]  TRUE FALSE FALSE
cumsum(!b)==0
[1]  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 

我想有一个简单的解决方案,但今天早上我可能太困了。

2 个答案:

答案 0 :(得分:2)

你可以使用,

a[which(a == 0):length(a)] <- 0
#a
#[1] 1 0 0

b[which(b == 0):length(b)] <- 0

#b
#[1] 1 1 1 1 0 0 0 0 0 0 0

虽然,这给出了所需的输出。但是,对于b,这会发出警告消息:

Warning message:
In which(b == 0):length(b) :
numerical expression has 3 elements: only the first used

which(b==0)的结果为#[1] 5 9 10

或者,你可以

a[which.min(a):length(a)] <- 0
b[which.min(b):length(b)]  <- 0

答案 1 :(得分:2)

有一个cummin函数

cummin(a)
#[1] 1 0 0

cummin(b)
#[1] 1 1 1 1 0 0 0 0 0 0 0