新列 - 来自多行和多列的多个条件
New column - multiple conditions from multiple rows and columns
在具有三列的大型数据框中,我必须添加第四列,其中的值有条件地基于前三列。
这是关于旅行的。一个人 (id) 有多种旅行方式(例如公共汽车、汽车、火车……)。例如,有时一个人有多种乘火车从 A 到 B 的选择。
我的数据框如下所示:
main_mode
duration
id
train
1250
1
train
900
1
car
540
1
train
650
2
car
450
2
plane
350
2
train
350
3
car
890
3
现在我想创建一个新列“train_avail”。如果火车旅行的时间是汽车旅行的两倍,那么我想在新栏中写 train_avail = 0 否则写 1.
我想要的:
main_mode
duration
id
train_avail
train
1250
1
0
train
900
1
1
car
540
1
NA
train
650
2
1
car
450
2
NA
plane
350
2
NA
train
350
3
1
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
在具有三列的大型数据框中,我必须添加第四列,其中的值有条件地基于前三列。
这是关于旅行的。一个人 (id) 有多种旅行方式(例如公共汽车、汽车、火车……)。例如,有时一个人有多种乘火车从 A 到 B 的选择。
我的数据框如下所示:
main_mode | duration | id |
---|---|---|
train | 1250 | 1 |
train | 900 | 1 |
car | 540 | 1 |
train | 650 | 2 |
car | 450 | 2 |
plane | 350 | 2 |
train | 350 | 3 |
car | 890 | 3 |
现在我想创建一个新列“train_avail”。如果火车旅行的时间是汽车旅行的两倍,那么我想在新栏中写 train_avail = 0 否则写 1.
我想要的:
main_mode | duration | id | train_avail |
---|---|---|---|
train | 1250 | 1 | 0 |
train | 900 | 1 | 1 |
car | 540 | 1 | NA |
train | 650 | 2 | 1 |
car | 450 | 2 | NA |
plane | 350 | 2 | NA |
train | 350 | 3 | 1 |
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