2

シーケンスの終わりと始まりを見つけたい長いデータ フレームがあります。簡素化する

b = c("a","c","a","c","e", "a","c","a","c","a" ,"c","a","c","a","c" ,"d","d","d","d","d")
a = c(0,0,0,0,1, 4,0,0,0,0, 5,1,6,0,0, 0,10,0,0,0)
df = data.frame(a,b)

私が望むのは、非ゼロから 0 へ、および 0 から非ゼロへの遷移をすべて見つける方法です。

lapply関数を呼び出し、前の呼び出しからの値を保存することでこれを行いました。

行Nと行N + 1、またはさらに良いことに、関数の行Nから行N + M、またはさらに良いものを見ることができる、よりエレガントなものを探しています。

4

1 に答える 1

0

おそらくこれはあなたが望むものですか?エレガントではないかもしれませんが、説明した遷移を検出する必要があります。

> lagn <- function(x, n) { c(rep(NA,n), x[1:(length(x)-n)]) }
> df$c <- lagn(df$a, 1)
# mult ensures one of the item is zero, add ensures one of the item was nonzero
> df[which( (df$a*df$c)==0 & (df$a+df$c)!=0),]
    a b  c
5   1 e  0
7   0 c  4
11  5 c  0
14  0 a  6
17 10 d  0
18  0 d 10
于 2012-04-18T05:01:19.903 に答える