2016-04-03 16 views
1

私はRを初めて使っています。これについてはスタックオーバーフローがありました。おそらく、私が望む答えを正しく検索していないでしょう。時間の経過に伴う確率分布?

私は、列として行と年として一意の二項関係を持つ行列を持っています。 2人がその年に対話しなかった場合、セルには0が、そうであれば1が入力されます。

私は各セルのパーセントを計算しようとしています。最初の1回発生後のエントリ数に対して1回の回数が発生します。これは、会ってから2人が毎年どのくらい頻繁にやり取りしたかということになります。

最初の1つのオカレンスは常に100%です。たとえば、以下の例から行B:

V1 V2 V3 V4 
A 0 0 1 0 
B 1 1 0 0 

は、私は限り行列その後、

data <- matrix(sample(0:1,5*4,rep=T),4) 
test<-t(apply(data,1,cumsum)) 

そして、私の各セルの累積合計を計算するようになった

100 100 66 50 

になり以下のような関数を作成するのがアイデアでしたが、私は分母のためにどの式を使用するかを決めました(以下では、最初に出現するエントリの数だけを削除します)。将来のケースをサブセット化する方法や、行列の列インデックスを直接参照する方法はわかりません。

mm<-function(x){(x)/(ncol(data)-(which(x>0)[1]))} 
tmp_int<-apply(data, 1:2, mm) 

これはもっと簡単な方法ですか?私はecdf関数を使ってみましたが、NAを返していました。

ありがとうございます。

+0

によって分裂しないことを確認しながらf(f(data) >= 1)は、要素ごとの部門のほとんどの適切な分母を与え、あなたはすでに持っているものtは((データを適用し 'はあり1、cumsum)/(1:ncol(data)))* 100'あなたが探しているのは? – nicola

答えて

1
ここ
data <- matrix(sample(0:1, 5 * 4, rep = TRUE), 4) 

f <- function(m) t(apply(m, 1, cumsum)) 
f(data)/(f(f(data) >= 1) + (f(data) == 0)) * 100 
#  [,1] [,2]  [,3]  [,4] [,5] 
# [1,] 100 50 66.66667 75.00000 60 
# [2,] 100 100 66.66667 50.00000 40 
# [3,] 0 100 50.00000 33.33333 25 
# [4,] 100 50 66.66667 50.00000 60 

ff(data) == 0たちは0

関連する問題