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