子集数据框具有包含截止值而不是排除值

马修·霍兰德

这应该是一个相当简单的解决方案,但是我一生中都没有办法解决。

我有一列,其中包含基于数据因素集的某种组合的比例的累积和,

例如: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
chinsoon12

最终理解,仅当prev值大于0.95时才要排除。以下应该工作:

DF$CumSum <- ave(DF$Proportion, DF$Factor1, DF$Factor2, FUN = "cumsum")
do.call(rbind, by(DF, paste(DF$Factor1, DF$Factor2), function(subDF) {
    subDF[c(TRUE, (dplyr::lag(subDF$CumSum) <= 0.95)[-1]),]
}))

#       Index Factor1 Factor2 Proportion CumSum
#A A.1      1       A       A       0.30   0.30
#A A.2      2       A       A       0.20   0.50
#A A.3      3       A       A       0.10   0.60
#A A.4      4       A       A       0.05   0.65
#A A.5      5       A       A       0.03   0.68
#A A.6      6       A       A       0.01   0.69
#A B.7      7       A       B       0.40   0.40
#A B.8      8       A       B       0.30   0.70
#A B.9      9       A       B       0.20   0.90
#A B.10    10       A       B       0.05   0.95
#B A.14    14       B       A       0.35   0.35
#B A.15    15       B       A       0.20   0.55
#B A.16    16       B       A       0.12   0.67
#B A.17    17       B       A       0.06   0.73
#B A.18    18       B       A       0.04   0.77
#B B.19    19       B       B       0.60   0.60
#B B.20    20       B       B       0.30   0.90
#B B.21    21       B       B       0.08   0.98

数据:

Df <- read.table(text="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", header=TRUE)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

具有逻辑值矩阵的子集数据帧

按列值子集数据框

使用唯一值的子集数据框并返回每个唯一值的所有行

Pandas数据框的子集,包含具有特定列值的行

从数据框中提取至少具有截止值以上三个值的列

在Pandas中操作子集数据框的行值

用于均匀拆分列值的子集数据框

基于多行中重复值的子集数据框

基于多列值的条件子集数据框

熊猫-子集数据框-获取最外面的索引级别的所有值

具有相同值的子集数据表出现两次以上

按列在R中具有等效值的子集数据

查找具有某些缺失值的数据框列的子集

子集数据帧仅包含一个因子的水平,而另一个因子的两个水平均具有值

具有MultiIndex的熊猫数据框:排除级别值

子集数据框:从原始df中获取先前值,但不在子集中

根据行值子集数据框并在 R 中创建新数据框列表

使用两列值同时相等的子集数据框,以检查所有其他列是否为零

基于最小值的子集数据

排除数据框中具有相同变量的具有相同值的行

具有某一列的特定值并排除另一列的一个值的数据子集

Django - 保存具有不同值的表单集数据

使用不同数量的列作为参数的具有动态条件的子集数据框

R,dplyr的子集数据帧过滤列A的行值而不是列B的行NA

在Pandas数据框中的列子集中查找具有非零值的行

如何对R中相同的两列具有不同值的数据框进行子集

您如何子集一个在R中具有多个重复值的数据框

在数据框中找到具有 nan 值的列的重复子集

具有布尔值和整数的数据框的熊猫条件子集