同一类别中的校准

时间:2016-12-22 15:44:24

标签: dataframe

小数据框示例:

    ID      V1       V2    is
1   01 23569.5 0.138996 FALSE
2   01 23611.5 1.318343  TRUE
3   01 23636.0 0.071871 FALSE
4   01 23665.5 0.081087 FALSE
5   01 33417.5 0.102158 FALSE
6   01 33563.5 0.119645 FALSE
7   01 42929.5 0.175000 FALSE
8   01 44552.5 0.066056 FALSE
9   01 45539.5 0.227691 FALSE
10  01 46984.5 0.649687 FALSE
11  01 47018.0 0.932445 FALSE
12  02 23611.5 1.418377  TRUE
13  02 23667.5 0.474754 FALSE
14  02 46984.0 0.443233 FALSE
15  02 47018.0 0.847738 FALSE
16  02 47051.5 0.446792 FALSE
17  02 47096.5 3.602696 FALSE
18  03 23464.0 1.010199 FALSE
19  03 23523.5 0.150067 FALSE
20  03 23611.5 1.273281  TRUE
21  03 29608.0 0.071324 FALSE...

每个ID类别中只有一行,is = T.我想知道在每个ID中计算比率V2(is = F)/ V2(is = T)的便捷方法,并将结果添加到新的列/向量中,结果如下:

    ID       V1       V2       is         Ratio
1   1   23569.5 0.138996    FALSE   0.10543235
2   1   23611.5 1.318343    TRUE    1
3   1   23636   0.071871    FALSE   0.054516162
4   1   23665.5 0.081087    FALSE   0.061506755
5   1   33417.5 0.102158    FALSE   0.077489697
6   1   33563.5 0.119645    FALSE   0.090754075
7   1   42929.5 0.175000    FALSE   0.132742389
8   1   44552.5 0.066056    FALSE   0.050105322
9   1   45539.5 0.227691    FALSE   0.172709985
10  1   46984.5 0.649687    FALSE   0.492805742
11  1   47018   0.932445    FALSE   0.707285585
12  2   23611.5 1.418377    TRUE    1
13  2   23667.5 0.474754    FALSE   0.334716369
14  2   46984   0.443233    FALSE   0.312493082
15  2   47018   0.847738    FALSE   0.597681716
16  2   47051.5 0.446792    FALSE   0.315002288
17  2   47096.5 3.602696    FALSE   2.540012987
18  3   23464   1.010199    FALSE   0.793382608
19  3   23523.5 0.150067    FALSE   0.117858509
20  3   23611.5 1.273281    TRUE    1
21  3   29608   0.071324    FALSE   0.056015915...

我很抱歉这个微不足道的问题。但是我的搜索结果没有帮助找到我正在寻找的解决方案。

1 个答案:

答案 0 :(得分:0)

我认为您的数据框名为data,已经按ID排序。

选择is==TRUE的记录:

data.true = data[data$is==TRUE,]

获取ID的运行长度编码:

rle.id = rle(data$ID)

对于每个带有is==TRUE的V2,请复制该组中存在多少个成员的次数:

v2.true = rep(data.true$v2, rle.id$len)

进行划分

data$Ratio = data$V2/v2.true