gpt4 book ai didi

r - 如何在 for 循环中使用 if else 语句来创建新列?

转载 作者:行者123 更新时间:2023-12-04 02:44:37 25 4
gpt4 key购买 nike

我从文本文件中导入了 4 列和 1180598 行数据到 R 中。以下是前五行数据:

  Vehicle ID  Time    Vehicle Class  Preceding Vehicle
1 2 0.1 2 0
2 2 0.2 2 0
3 2 0.3 2 0
4 2 0.4 2 0
5 2 0.5 2 0

上面最左边的列是索引。 “车辆 ID”是车辆在特定“时间”的 ID,如“时间”列中所示。总共有 2169 辆车,但这里只显示了车辆 2。 'Vehicle Class' 可以是 1=motorcycle,2=car 或 3=truck。在上面显示的数据中,它是汽车。 'Preceding Vehicle' 是在'Vehicle ID' 列中提及的车辆之前的车辆的ID。

我想使用以上信息创建一个新的“先前车辆类别”列。为了让 R 找到 Preceding Vehicle Class,它必须首先查看 'Preceding Vehicle' 列,然后去查看 'Vehicle ID' 列,当它找到相同的 ID 时,它应该在 'Vehicle Class' 中看到车辆类别列并将结果存储在新列“先前的车辆类别”中。我试过以下代码,但加载时间超过 5 分钟,但没有任何反应:

for (i in a[,'Preceding Vehicle'])  for (j in a[,'Vehicle ID']) {
if (i==j) {pclass <- a[,'Vehicle ID']} else {pclass <- 0} }
a[,'Preceding Vehicle Class'] <- pclass

'a' 是数据框的名称。请帮助修复代码。

最佳答案

使用以下版本的a:

a <- structure(list(VehicleID = c(0L, 0L, 2L, 2L), Time = c(0.1, 0.2, 0.4, 0.5), VehicleClass = c(8L, 8L, 2L, 2L), PrecedingVehicle = c(-1L, -1L, 0L, 0L)), .Names = c("VehicleID", "Time", "VehicleClass", "PrecedingVehicle"), class = "data.frame", row.names = c("1", "2", "9", "10"))

看起来像:

   VehicleID Time VehicleClass PrecedingVehicle
1 0 0.1 8 -1
2 0 0.2 8 -1
9 2 0.4 2 0
10 2 0.5 2 0

你可以这样做:

a$PrecVehClass <- a$VehicleClass[match(a$PrecedingVehicle,a$VehicleID)]

这会给你想要的结果:

   VehicleID Time VehicleClass PrecedingVehicle PrecVehClass
1 0 0.1 8 -1 NA
2 0 0.2 8 -1 NA
9 2 0.4 2 0 8
10 2 0.5 2 0 8

关于r - 如何在 for 循环中使用 if else 语句来创建新列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19086958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com