这应该是一个相当简单的解决方案,但我没有为我的生活能够弄清楚如何解决 .
我有一个列,其中包含基于我的数据的某个因子级别组合的累积比例总和,
例如:0.34,0.57,0.66,0.68,0.73,0.81,0.90,0.97,0.98,0.99,
然后数据移动到下一个因子组合并重置累积总和,
例如:0.27,0.29,0.38,0.56,0.78,0.94,0.96,0.97,0.98等
我用以下两个因素的组合计算了这个:
DF$CumSum <-ave(DF$Proportion, DF$Factor1, DF$Factor2, FUN = "cumsum")
我想设置一个截止值,将我的数据子集设置为0.95,这样我就可以排除超过此阈值的越来越小的比例行,因为数据按比例排列,然后再累加 . 问题是,如果我有一组比例,如下,
例如:0.58,0.97,0.98,0.99,
然后通过阈值0.95我排除,在这种情况下0.39的比例,这是很多,我会留下,
例如:0.58
虽然0.97超过阈值(0.95),但前一行低于阈值(0.58) . 我希望排除第一行之后的任何后续行高于0.95的因子级别组合 .
有没有办法使用不同的子集技术,以便在这种情况下,数据将被子集化,包括这个值?例如 . 输出将是:0.58,0.97而不增加我的截止阈值 . 我尝试在for循环中实现ifelse语句但没有成功 . 这就是我想出的:
Threshold <- 0.95
for(i in 2:length(DF$Index)) {
DF[i] <- ifelse(DF$CumSum[i-1] < Threshold & DF$CumSum[i] >= Threshold,
DF[-i,], DF[i])
}
示例数据:
Index Factor1 Factor2 Proportion CumSum
1 A A 0.3 0.3
2 A A 0.2 0.5
3 A A 0.1 0.6
4 A A 0.05 0.65
5 A A 0.03 0.68
6 A A 0.01 0.69
7 A B 0.4 0.4
8 A B 0.3 0.7
9 A B 0.2 0.9
10 A B 0.05 0.95
11 A B 0.03 0.98
12 A B 0.002 0.982
13 A B 0.001 0.983
14 B A 0.35 0.35
15 B A 0.2 0.55
16 B A 0.12 0.67
17 B A 0.06 0.73
18 B A 0.04 0.77
19 B B 0.6 0.6
20 B B 0.3 0.9
21 B B 0.08 0.98
1 回答
终于明白,如果prev值超过0.95,你只想排除 . 以下应该工作:
数据: