gpt4 book ai didi

r - 如何在特定条件的行周围删除数据框中的行缓冲区

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

我试图在满足特定条件的行之后删除数据框中 x 行内的行。

我有一个数据框,其中包含一个响应变量、一个表示条件的测量类型和时间。这是一个模拟数据集:

data <- data.frame(rlnorm(45,0,1),
c(rep(1,15),rep(2,15),rep(1,15)),
seq(
from=as.POSIXct("2012-1-1 0:00", tz="EST"),
to=as.POSIXct("2012-1-1 0:44", tz="EST"),
by="min"))
names(data) <- c('Variable','Type','Time')

在这个模拟案例中,我想在条件 2 发生后删除条件 1 中的前 5 行。

我考虑解决这个问题的方法是生成一个单独的向量,该向量确定每个值为 1 的观察与最后 2 的距离。这是我编写的代码:
dist = vector()
for(i in 1:nrow(data)) {

if(data$Type[i] != 1) dist[i] <- 0

else {
position = i
tempcount = 0
while(position > 0 && data$Type[position] == 1){
position = position - 1
tempcount = tempcount + 1
}
dist[i] = tempcount
}
}

这段代码可以解决问题,但效率极低。我想知道是否有人有一些更聪明、更快的解决方案。

最佳答案

如果我理解正确,这应该可以解决问题:

criteria1 = which(data$Type[2:nrow(data)] == 2 & data$Type[2:nrow(data)] != data$Type[1:nrow(data)-1]) +1
criteria2 = as.vector(sapply(criteria1,function(x) seq(x,x+5)))
data[-criteria2,]

怎么运行的:
  • 标准 1 包含 Type==2 的索引,但前一行不是同一类型。像 2:nrow(data) 这样奇怪的 lookign 子集是因为我们想与前一行进行比较,但是对于第一行,没有前一行。因此,我们在最后添加 +1。
  • 标准 2 包含从标准 1 中的数字开始到这些数字+5
  • 的序列
  • 第三行执行子集

  • 这可能需要小的修改,我不太清楚您的代码中的标准 1 和标准 2 是什么。让我知道这是否有效,或者您需要更多建议!

    关于r - 如何在特定条件的行周围删除数据框中的行缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45117987/

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