2017-05-04 10 views
0

セイをカウント再起動している間、私はデータフレームはrownumbersの提供条件付き

s<-c(rep(1,5),rep(2,5)) 
TF<-c('T','F','F','T','T','F','F','F','F','T') 
df<-data.frame(s,TF) 
df 

を持っている私はすべてのTさんのrownumbersを知っていただきたいと思いますが、私はsの各固有の番号のためrownumbersを数える再起動します。したがって、この例のために私が取得したいと思います:実際に

s rn1 rn2 
1 1  4 
2 5  10 

を私は例数千人を持っているので、私は私のためにそれを行うには気の利いたコードのいくつかの種類を取得することができれば、それは非常に参考になります。どんな助力も非常に感謝しています。私の試みで、私は行を数える再起動する方法を見つけ出すことができませんでした :

tapply(1:nrow(df), df$s, function(x) x[which(df$TF[x])]) 
+1

私はあなたの入力からご希望の出力を得た方法を理解していません。 's = 1'に1,4,5の3つのTがあるように見えます。行番号を「再起動」するとどういう意味ですか?あなたは1から数え続けているようです。結果はどのくらい正確に返されますか? – MrFlick

+0

あなたの例でエラーがあると思われます。出力行番号は、s = 1の場合は1,4,5、s = 2の場合は10になります。これは、目的の出力形式が機能しない理由の例です:列の数が異なります。 –

答えて

1

考えられる解決策:

> lapply(split(df, df$s), function(x) rownames(x)[x$TF == 'T']) 
$`1` 
[1] "1" "4" "5" 

$`2` 
[1] "10" 
1

dplyrを使用して、次の解決策は、あなたが欲しいものを行いますが、それはきちんとしたデータを保存し列に値を広げるのではなく、 s = 1とs = 2では列の数が異なるため不可能です。これは必要です。

df %>% 
    mutate(nr = row_number()) %>% 
    filter(TF) %>% 
    select(-TF) 

出力は次のようになります。

 s nr 
1  1  1 
2  1  4 
3  1  5 
4  2 10