良い一日、
d <- c(1,1,1,2,2,2,3,3,3)
e <- c(5,6,7,5,6,7,5,6,7)
f <- c(0,0,1,0,1,0,0,0,1)
df <- data.frame(d,e,f)
上記のようなデータがあります。私がする必要があるのは、dの一意の要素ごとに、fの最初の非ゼロ値を見つけ、eの対応する値を見つけることです。具体的には、別のベクトルgが必要なので、次のようになります。
d <- c(1,1,1,2,2,2,3,3,3)
e <- c(5,6,7,5,6,7,5,6,7)
f <- c(0,0,1,0,1,0,0,0,1)
g <- c(7,7,7,6,6,6,7,7,7)
df <- data.frame(d,e,f,g)
これを簡単に行うための提案はありますか?split()を使用できると思いましたが、分割後にwhich()を使用するのに問題があります。私は次のようにaveを使用できます:
foo <- function(x){which(x>0)[1]}
df$t <- ave(df$f,df$d,FUN=foo)
しかし、eの値を見つけるのに苦労しています。どんな助けでも大歓迎です。