首页 > 解决方案 > 根据某些条件查找持续时间

问题描述

我有 4 个变量 x,y,z,a 将同时记录在我的数据库中。我需要找到x or y or z !=0 and a>8. 它将来自01-01-2019 01:04:32 to 01-01-2019 01:06:13. 我正在尝试获取满足上述条件的所有事件和持续时间。这有点像间隙和孤岛问题。

输出如:01-01-2019 01:04:32 to 01-01-2019 01:06:13 for 00:01:41。如果我有更多数据,我也会尝试按天或按周显示它。

v1                  v2  v3
01-01-2019 01:03:56 x   1
01-01-2019 01:03:56 y   2
01-01-2019 01:03:56 z   3
01-01-2019 01:03:56 a   4.5
01-01-2019 01:04:32 x   3
01-01-2019 01:04:32 y   2.1
01-01-2019 01:04:32 z   6
01-01-2019 01:04:32 a   8
01-01-2019 01:06:13 x   9
01-01-2019 01:06:13 y   3
01-01-2019 01:06:13 z   2
01-01-2019 01:06:13 a   9.56

标签: rdataframe

解决方案


下面的代码标识何时满足您的条件。你怎么得到“01-01-2019 01:04:32 01-01-2019 01:06:13 00:01:41”应该是你的结果?您的示例数据框会另外指出,因为 01:03:56 也符合您在 x、y 和 z 上的标准。

# Flag when conditions are met
df$s <- ifelse( (df$v2 == 'x' & df$v3 != 0 ) | (df$v2 == 'y' & df$v3 != 0 ) | (df$v2 == 'z' & df$v3 != 0 ) | (df$v2 == 'a' & df$v3 > 8) , 1, 0) 

View(df)

使用这些数据

# Create sample data frame
df <- data.frame(
    v1 = c(
    as.POSIXct("2019-01-01 01:03:56"), 
    as.POSIXct("2019-01-01 01:03:56"),
    as.POSIXct("2019-01-01 01:03:56"),
    as.POSIXct("2019-01-01 01:03:56"),
    as.POSIXct("2019-01-01 01:04:32"),
    as.POSIXct("2019-01-01 01:04:32"),
    as.POSIXct("2019-01-01 01:04:32"),
    as.POSIXct("2019-01-01 01:04:32"),
    as.POSIXct("2019-01-01 01:06:13"),
    as.POSIXct("2019-01-01 01:06:13"),
    as.POSIXct("2019-01-01 01:06:13"),
    as.POSIXct("2019-01-01 01:06:13")),
    v2 = c('x','y','z','a','x','y','z','a','x','y','z','a'),
    v3 = c(1,2,3,4.5,3,2.1,6,8,9,3,2,9.56)
)

推荐阅读