在多个条件下获得价值

时间:2019-09-08 19:37:18

标签: r

我下面有一个数据框,它是有关公司支出的。有没有一种方法可以获取特定日期在特定日期的费用明细。下面让我详细解释(也许这是最难解决的问题之一)

location of ruby executable in foo.rb: /Users/richiethomas/.rbenv/versions/2.5.1/bin/ruby
2.5.1
-----
location of ruby executable inside bar.rb: /Users/richiethomas/.rbenv/versions/2.5.1/bin/ruby
2.5.1

在每个位置(L1,L2和L3)都有2个日期(5月13日和5月14日)。好。我需要在L1位置以最低的实验室费用(即14,因为在5月13日和5月14日之间的最低费用是14)来确定电子充电和马赫充电。同样,我需要在位置L1处至少收取Elec Charge(即19)的Lab费用和Mach Charge。因此,对于每个位置,我都需要此详细信息。我们可以解决这个问题吗?看起来很复杂

2 个答案:

答案 0 :(得分:1)

好,重述您的问题。    对于每个位置:       在实验室费用最低的那一天,电费和马赫费是多少?       在电子费用最低的那一天,实验室和马赫数是多少?

首先,R不喜欢带有空格的名称,因此我将其重命名。

library(tidyverse) 

df <- df %>% 
  rename(LabCharge = `Lab Charge`, 
         ElecCharge = `Elec Charge`, 
         MachCharge = `Mach Charge`)

然后,我们将在每天的最低费用上添加一个标志。

df <- df %>% 
  group_by(Location) %>% 
  mutate(min_lab = LabCharge == min(LabCharge, na.rm = TRUE),
         min_elec = ElecCharge == min(ElecCharge, na.rm = TRUE))

最后,我们要限制为这些最小行。 min_labmin_elec变量是booleans,为true或false。通过对变量进行过滤,我们仅看到变量为TRUE的那些行,即仅看到指定费用最小的实验室记录。

df %>% filter(min_lab)

df %>% filter(min_elec)

您将在此解决方案中看到位置2具有两天相同的电荷,因此它们都标记为最小值,并且都已报告。

答案 1 :(得分:0)

似乎我们需要一个let fib (n:int) :int = let rec loop (i:int) (a:int) (b:int) :int = if i = n then a else loop (i+1) (b) (a+b) in loop 0 0 1;; 分组的人

mutate_at