首页 > 解决方案 > 如果 col[B] 在特定范围内,则尝试获取 col[A] 的总和

问题描述

我正在尝试获取sum特定工资范围内的百分比。

我有一张表wop,意思是“人的工资”。就像这样

wage   percentage
2      0.1
3      0.1
3.4    0.01
3.5    0.12
4      0.01
5      0.02
6.3    0.1
7      0.2
9      0.11
12     0.12
.
.
.

可以看到这个表是按照 排序的wage[middle wage*0.5 < x <= middle wage*1.5] middle wage如果工资 id 在范围内意味着如果我们按工资排列行的范围,并且如果百分比的累积总和“最接近但小于 0.5”,我正在尝试对所有百分比 求和,则该工资被称为middle wage

我确实喜欢这个

wop$per <- cumsum(wop&percentage)

并发现 [which.min(wop$per-0.5 < 0) - 1]给了我“中等工资”。

所以我继续制作这样的功能

mid <- function(x){
  if(x$wage <= x[which.min(wop$per-0.5 < 0) - 1 , 1]*1.5 &
      x$wage > x[which.min(wop$per-0.5 < 0) - 1 , 1]*0.5) {
    a <- sum(x$percentage)
  }
  return(a)
}

但此代码继续显示“错误”。

请帮助...如何解决这个问题。

标签: r

解决方案


这是一种执行问题要求的矢量化方式。

mid<- function(DF){
  DF <- DF[order(DF[['wage']]), ]
  y <- cumsum(DF[['percentage']])
  i <- which.max(y[y < 0.5])
  inx <- DF[i, 'wage']*0.5 < DF[['wage']] & DF[['wage']] < DF[i, 'wage']*1.5
  sum(DF[inx, 'percentage'])
}  

mid(wop)
#[1] 0.57

数据。

wop <- read.table(text = "
wage   percentage
2      0.1
3      0.1
3.4    0.01
3.5    0.12
4      0.01
5      0.02
6.3    0.1
7      0.2
9      0.11
12     0.12
", header = TRUE)

推荐阅读