要解析文本文件,我想在出现某个字符串后提取所有数字行。我设法提取文本。现在只选择在此文本后出现的数字行归结为这个小问题。从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
我想有一个简单的解决方案,但今天早上我可能太困了。
答案 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