gpt4 book ai didi

R - 如果某个值出现在第 2 列中,则从第 1 列中提取多行

转载 作者:行者123 更新时间:2023-12-04 10:54:30 27 4
gpt4 key购买 nike

我有一个关于从 R 中的 data.frame 中提取多个值并将它们放入新的 data.frame 的问题。

我有一个看起来像这样的 data.frame (df)

PRICE     EVENT
1.50 0
1.70 0
1.65 0
1.20 1
0.90 0
1.70 0
1.55 0
. .
. .
1.10 0
1.20 0
1.14 1
0.90 0

我的实际 data.frame 有这两列和超过 300.000 行。名为 EVENT 的列只有值 0 或 1(值 1 代表某个事件发生)。

我研究的第一步:如果事件发生,分析价格。
第一步很简单。我做到了
vector<-df[df$EVENT==1, "PRICE"]

现在 vector包含事件日的所有价格。 (此处:1.20 和 1.14)

但现在我研究的第二步是它变得有趣的地方:

现在我不仅想要 eventday 的价格,还想要 eventday 之前和之后 x 天的价格,并将它们放入矩阵中

例如:我想要事件前两天和事件后一天(包括事件日)的价格

比我试图创建的新 data.frame 看起来像
    Event 1               Event n
-2 1.70 ... 1.10
-1 1.65 ... 1.20
0 1.20 ... 1.14
+1 0.90 ... 0.90

请记住,4 天跨度 [-2:1] 只是一个示例。在我的实际研究中,我必须涵盖 91 天的跨度 [-30:60]。

谢谢您的帮助 :)

最佳答案

我们可以创建一个包含相关行号的矩阵,然后将其用作掩码以达到您的预期输出:

event_rows <- which(df$EVENT==1)
mask <- sapply(event_rows, function(x) (x-2):(x+2))
apply(mask, 2, function(x) df$PRICE[x])
# [,1] [,2]
#[1,] 1.70 1.10
#[2,] 1.65 1.20
#[3,] 1.20 1.14
#[4,] 0.90 0.90
#[5,] 1.70 NA

数据
df <- structure(list(PRICE = c(1.5, 1.7, 1.65, 1.2, 0.9, 1.7, 1.55, 
1.1, 1.2, 1.14, 0.9), EVENT = c(0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L,
0L, 1L, 0L)), .Names = c("PRICE", "EVENT"), class = "data.frame", row.names = c(NA,
-11L))

关于R - 如果某个值出现在第 2 列中,则从第 1 列中提取多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48438952/

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