r - 根据某些条件查找持续时间
问题描述
我有 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
解决方案
下面的代码标识何时满足您的条件。你怎么得到“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)
)
推荐阅读
- asp.net - SignalR 在客户端调用 ASP.NET 时获取用户身份
- php - php websocket棘轮不从学说中获取最新数据
- c++ - 动态内存如何与 CLion 一起工作?
- r - 如果 file.csv 使用“;”,则将字符变量转换为数字时出错 而不是“,”分隔符。R
- c++ - 如何在 VC++ 中定义一个超过 MAXINT 元素的布尔数组
- android - 使用 AppAuth-Android 和使用 IdS4 的 aspnet 核心进行身份验证
- javascript - 回调函数无法访问父函数范围内的变量
- javascript - 如何分离日期输入引导日期范围选择器
- airflow - Airflow: how to use xcom_push and xcom_pull in non-PythonOperator
- python - 通过添加 2 个 1D 数组的每个组合在 Python 中创建 2D 矩阵