随时间变化的概率分布?

Probability distribution over time?

我是 R 的新手。我一直在研究 Stack Overflow,可能没有正确搜索我想要的答案。

我有一个矩阵,其中行具有独特的二元关系,列具有年份。如果两人在那一年没有互动,则单元格填充 0,如果他们互动,则填充 1。

我正在尝试计算每个单元格的百分比 - 1 出现的次数相对于第一次出现 1 之后的条目数。通俗地说,这就是两个人自从他们在一起以来每年互动的频率遇见了

连续第一个出现的 1 总是 100%。例如,下例中的 B 行:

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

变成

 100 100 66 50

我已经为矩阵的每个单元格计算了累积和

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

然后我的想法是创建一个类似于下面的函数,但我坚持使用什么表达式作为分母(下面只删除第一次出现之前的条目数)。我不太清楚如何对未来的情况进行子集化,或者直接引用矩阵的列索引。

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

或者有更简单的方法吗?我尝试使用 ecdf 函数,但它返回 NA。

非常感谢。

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

这里 f 是您已有的,f(f(data) >= 1) 给出了几乎适合元素划分的分母,而 f(data) == 0 确保我们不除以 0。