随时间推移的概率分布?

时间:2016-04-03 22:34:49

标签: r sna

我是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函数,但它正在返回NAs。

非常感谢。

1 个答案:

答案 0 :(得分: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

此处f是您已有的,f(f(data) >= 1)为元素分割提供了几乎合适的分母,而f(data) == 0确保我们不会除以0。