新列 - 来自多个行和列的多个条件

发布于 2025-01-17 09:23:09 字数 1412 浏览 1 评论 0原文

在带有三列的大数据框中,我必须根据前三列添加一个带有条件值的第四列。

这是关于旅行的。一个人(ID)有几种旅行选择(例如巴士,汽车,火车,...)。有时,一个人可以通过火车从A到B旅行几种选择。

我的数据框看起来像这样:

main_mode持续时间ID
火车12501
火车9001
5401
火车6502
汽车4502
平面3502
火车3503
CAR8903

现在我想创建一个新的列“ Train_avail”。如果火车旅行的时间是汽车之旅的两倍,那么我想在新列中写下train_avail = 0,否则写1。

我想拥有的东西:

main_modedistrationidtrain_avail
train125010
火车9001 1 11 1
辆车5401NA
火车65021
4502NA
平面3502NA
火车35031
CAR8903NA

感谢您的帮助!

In a large dataframe with three columns I have to add a fourth column with values conditionally based on the first three columns.

It's about travel. A person (id) has several options to travel (e.g. bus, car, train, ...). Sometimes a person has several options by train to travel from A to B for example.

My dataframe looks like this:

main_modedurationid
train12501
train9001
car5401
train6502
car4502
plane3502
train3503
car8903

Now I want to create a new column "train_avail". If the train journey takes twice as long as the car journey, then I would like to write train_avail = 0 in a new column otherwise write 1.

What i would like to have:

main_modedurationidtrain_avail
train125010
train90011
car5401NA
train65021
car4502NA
plane3502NA
train35031
car8903NA

Thanks for your help!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

难理解 2025-01-24 09:23:09
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
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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文