R 如何使用某些数据为组查找新列?

R 如何使用某些数据为组查找新列?,r,dataframe,R,Dataframe,我有一个家庭作为一个群体。在每个家庭中,每个成员都有一些数据。我需要为乘公共汽车旅行的成员查找旅行费用。30天通行证的票价是84美元,所以每天2.8美元,学生和60岁以上的人的费用是一半。因为每次出行次数是无限的,所以我想用每人的出行次数除以2.8,如果一个人没有乘坐公交车的话,它是零 以下是一个例子: household person trip mode student age 1 1

我有一个家庭作为一个群体。在每个家庭中,每个成员都有一些数据。我需要为乘公共汽车旅行的成员查找旅行费用。30天通行证的票价是84美元,所以每天2.8美元,学生和60岁以上的人的费用是一半。因为每次出行次数是无限的,所以我想用每人的出行次数除以2.8,如果一个人没有乘坐公交车的话,它是零

以下是一个例子:

     household     person      trip       mode       student     age
         1            1          1          car         1         23
         1            1          2           bus        1         23
         1            1          3           bus        1         23
         1            2          1          car         0         65
         1            2          2           walk       0         65
         1            2          3           bus        0         65
         2            1          1            bus       0         18
         2            1          2            bus       0         18
         2            2          1             walk     0          40
发出

      household     person      trip       mode       student     age   Fare
         1            1          1          car         1         23    1.4/2
         1            1          2           bus        1         23   1.4/2
         1            1          3           bus        1         23   1.4/2
         1            2          1          car         0         65   1.4/1
         1            2          2           walk       0         65   1.4/1
         1            2          3           bus        0         65   1.4/1
         2            1          1            bus       0         18   2.8/2
         2            1          2            bus       0         18   2.8/2
         2            2          1             walk     0          40   0
第一个人是学生,有2次乘公交车,因此费用为1.4/2,第二个人有1次乘公交车,年龄超过65岁。在第二个家庭中,第一个人有两次乘车旅行,但他是杨,而不是学生,因此成本为2.8/2,最后一个人没有乘车旅行,所以0。

这里是使用dplyr的一种方法。我们按家庭和个人对数据帧进行分组,如果该人是学生或年龄>60岁,我们采用半价,并将其除以次数mode==bus

这里有一种使用dplyr的方法。我们按家庭和个人对数据帧进行分组,如果该人是学生或年龄>60岁,我们采用半价,并将其除以次数mode==bus


为什么我会得到一些信息?@shere你能试试更新的代码吗。我添加了一个额外的条件来检查。为什么我得到一些我得到的inf?@shere你能试试更新的代码吗。我添加了一个额外的条件来检查。
rate = 2.8
library(dplyr)

df %>%
  group_by(household, person) %>%
  mutate(Fare = case_when(any(student == 1 | age > 60) & any(mode == "bus") ~ 
                         (rate/2)/sum(mode == "bus"), 
                      any(mode == "bus") ~ rate/sum(mode == "bus"), 
                      TRUE ~ 0))

# household person  trip mode  student   age  Fare
#      <int>  <int> <int> <fct>   <int> <int> <dbl>
#1         1      1     1 car         1    23   0.7
#2         1      1     2 bus         1    23   0.7
#3         1      1     3 bus         1    23   0.7
#4         1      2     1 car         0    65   1.4
#5         1      2     2 walk        0    65   1.4
#6         1      2     3 bus         0    65   1.4
#7         2      1     1 bus         0    18   1.4
#8         2      1     2 bus         0    18   1.4
#9         2      2     1 walk        0    40     0