在具有三列的大型数据框(“绑定”)中,我必须添加第四列,其值有条件地基于前三列。
是关于旅行的。一个人 (id) 有多种旅行选择(例如公共汽车、汽车、火车……),它们总是完全不同的。例如,有时一个人有多种选择乘坐火车从 A 到 B。
我的数据框如下所示:
主模式 | 期间 | ID |
---|---|---|
火车 | 1250 | 1 |
火车 | 900 | 1 |
车 | 540 | 1 |
火车 | 650 | 2 |
车 | 450 | 2 |
飞机 | 350 | 2 |
火车 | 350 | 3 |
车 | 890 | 3 |
现在我想创建一个新列“train_avail”。如果火车旅行的时间是汽车旅行的两倍,那么我想在新列中写 train_avail = 0,否则写 1。
我想拥有什么:
主模式 | 期间 | ID | train_avail |
---|---|---|---|
火车 | 1250 | 1 | 0 |
火车 | 900 | 1 | 1 |
车 | 540 | 1 | 不适用 |
火车 | 650 | 2 | 1 |
车 | 450 | 2 | 不适用 |
飞机 | 350 | 2 | 不适用 |
火车 | 350 | 3 | 1 |
车 | 890 | 3 | 不适用 |
这就是我尝试过的,但显然不起作用。在我完全一无所知的情况下,我不知道如何编写代码。
bind %>%
group_by(id) %>%
mutate(train_avail = ifelse((bind$main_mode = train) & (duration = 2 * (bind$main_mode = car)) ~ '0', '1'))
对不起,我完全不知道这应该如何工作。我只用 R 工作了几天。
谢谢你的帮助!!
df |>
group_by(id) |>
mutate(train_avail = {
car <- min(duration[main_mode == "car"])
if_else(main_mode == "train",
if_else(duration > 2* car, 0, 1),
NA_real_)
})
##> + # A tibble: 8 × 4
##> # Groups: id [3]
##> main_mode duration id train_avail
##> <chr> <int> <int> <dbl>
##> 1 train 1250 1 0
##> 2 train 900 1 1
##> 3 car 540 1 NA
##> 4 train 650 2 1
##> 5 car 450 2 NA
##> 6 plane 350 2 NA
##> 7 train 350 3 1
##> 8 car 890 3 NA
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句