创建一个与R中的列具有最接近值的标志

时间:2016-06-14 14:15:28

标签: r

我有一个df(参见下文)我需要根据df中的列创建一个标志.falg应该基于预定义的值。

Year    Month   Budget   percentage_change 
2014    Feb  $ 2,285,940     61.993 
2014    Feb  $ 2,294,280     62.219 
2014    Feb  $ 2,356,192     63.898 
2014    Feb  $ 2,356,192     63.898 
2014    Feb  $ 2,359,000     64.000 
2014    Feb  $ 2,359,255     65.000 
2014    Feb  $ 2,359,372     70.000 
2015    Feb  $ 2,465,829     68.905 
2015    Feb  $ 2,475,187     68.912 
2015    Feb  $ 2,475,596     68.918 
2015    Feb  $ 2,480,543     69.472 
2015    Feb  $ 2,499,953     69.472 
2015    Feb  $ 2,500,021     69.702 
2015    Feb  $ 2,503,888     69.787 
2015    Feb  $ 2,503,888     70.041 

我正在寻找的所需输出如下所述

Year    Month          Budget   percentage_change Flag
2014    Feb  $        2,285,940          61.993     0
2014    Feb  $        2,294,280          62.219     0
2014    Feb  $        2,356,192          63.898     0
2014    Feb  $        2,356,192          63.898     0
2014    Feb  $        2,359,000          64.000     0
2014    Feb  $        2,359,255          65.000     0
2014    Feb  $        2,359,372          70.000     1
2015    Feb  $        2,465,829          68.905     0
2015    Feb  $        2,475,187          68.912     0
2015    Feb  $        2,475,596          68.918     0
2015    Feb  $        2,480,543          69.472     0
2015    Feb  $        2,499,953          69.472     0
2015    Feb  $        2,500,021          69.702     0
2015    Feb  $        2,503,888          69.787     0
2015    Feb  $        2,503,888          70.041     1

创建的标志位于百分比变化列值最接近71的值。

我遇到的问题是数据很长,百分比在基于年和月的每个特定因素后都会被重复。

2 个答案:

答案 0 :(得分:0)

假设您的数据位于名为data.frame的{​​{1}}中。我们需要对组执行此操作,因此我们可以使用mydf,如下所示:

dplyr

答案 1 :(得分:0)

您可以从预定义值中减去列,取绝对值,然后找到最小值。

这是一个功能,因此可以在多个数据集和多个列上重现:

createFlag <- function(column, value) {
  return(ifelse(abs(column-value)==min(abs(column-value), na.rm=T), 1, 0))
}

mydf$Flag <- createFlag(mydf$percentage_change, 71)