gpt4 book ai didi

r - 如何标记R中特定行周围的任何值范围?

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

这是 this one 的后续问题.

数据

x <- data.frame(file.ID = "Car1", 
frames = 1:15,
lane.change = c("no", "no", "no", "yes",
"no", "no", "no", "no",
"no", "yes", "no", "no", "no", "no", "no"))

问题

我想在给定 文件的每次换道中标记 few 行上方和 lane.change=="yes" 行之后的几行。 ID 组。上一个问题的答案适用于连续行,但不适用于任意数量的行。我尝试在 leadlag 函数中提供参数 n 但它没有给出想要的结果。

期望的输出

理想情况下,我希望能够在 lane.change=="yes" 之前和之后标记任意数量的行。在我的原始数据框中,我想在之前和之后标记 800 行。但在示例数据框 x 我试图标记 2。所以所需的输出应该是:

   file.ID frames lane.change range_LC
1 Car1 1 no .
2 Car1 2 no LC1
3 Car1 3 no LC1
4 Car1 4 yes LC1
5 Car1 5 no LC1
6 Car1 6 no LC1
7 Car1 7 no .
8 Car1 8 no LC2
9 Car1 9 no LC2
10 Car1 10 yes LC2
11 Car1 11 no LC2
12 Car1 12 no LC2
13 Car1 13 no .
14 Car1 14 no .
15 Car1 15 no .

请帮助我获得所需的输出。由于原始数据有多个 file.ID,我更喜欢 dplyr 解决方案,因为我以后可以使用 group_by。谢谢。

编辑

我想概括多个 file.ID 的代码。您可以下载包含 2 个 file.ID 的原始数据帧的子集,here .我尝试了以下(感谢@G5W的解决方案):

library(tidyr)
by_file.ID <- c %>%
group_by(file.ID) %>%
nest()

library(purrr)
by_file.ID <- by_file.ID %>%
mutate(range_LC = map(data, ~ ".")) %>%
mutate(Changes = map(data, ~ tail(which(.$lane.change=="yes"),-1)))

请注意,在每种情况下,第一次变道的索引号都非常小。所以,我通过 tail(which(...), -1) 跳过它。另外,请注意,在这些数据中,我想在换道行前后使用 800 行。因此,单个 file.ID 的代码应该是这样的:

range_LC[t(outer(Changes, -800:800, '+'))] = rep(1:length(Changes), each=1601)

上面的代码是我不知道如何应用到 file.ID 组的主要代码。我考虑过将 for 循环do.call() 一起使用,但由于大量的车道变化和 file.ID,它可能会很慢s。

感谢您花费时间和精力帮助我。

最佳答案

这只需要仔细索引数组。

x$range_LC = "."
Changes = which(x$lane.change == "yes")
x$range_LC[t(outer(Changes, -2:2, '+'))] = rep(1:length(Changes), each=5)
x
file.ID frames lane.change range_LC
1 Car1 1 no .
2 Car1 2 no 1
3 Car1 3 no 1
4 Car1 4 yes 1
5 Car1 5 no 1
6 Car1 6 no 1
7 Car1 7 no .
8 Car1 8 no 2
9 Car1 9 no 2
10 Car1 10 yes 2
11 Car1 11 no 2
12 Car1 12 no 2
13 Car1 13 no .
14 Car1 14 no .
15 Car1 15 no .

关于r - 如何标记R中特定行周围的任何值范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44831994/

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