根据特定区间切点
cut point according specific interval
我试图总结两个变量之间的时间差距并找到列表的长度。
我的数据集是这样的。我想得到他们的差距低于 6:00 的步数。
Group Time1 Gap
A 11:00:00 AM
A 11:04:00 AM 4:00
A 11:06:00 AM 2:00
A 11:08:00 AM 2:00
A 11:12:00 AM 4:00
A 11:19:00 AM 7:00
A 11:26:00 AM 7:00
A 11:28:00 AM 2:00
A 11:30:00 AM 2:00
A 11:32:00 AM 2:00
A 11:34:00 AM 2:00
A 11:36:00 AM 2:00
最终结果应该是这样的;
Group Gap Step
A 12:00 4
如果间隔大于6:00我不想继续计算其他步数
我使用了过滤器选项“... %>% filter(gap < 8:00)%>% ...”但它没有用。我知道 cut point 会将这个列表分成两个独立的部分。
样本 DF:
structure(list(Group = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L), .Label = "A", class = "factor"), Time1 = structure(1:12, .Label = c("11:00:00 AM",
"11:04:00 AM", "11:06:00 AM", "11:08:00 AM", "11:12:00 AM", "11:19:00 AM",
"11:26:00 AM", "11:28:00 AM", "11:30:00 AM", "11:32:00 AM", "11:34:00 AM",
"11:36:00 AM"), class = "factor"), Gap = structure(c(1L, 3L,
2L, 2L, 3L, 4L, 4L, 2L, 2L, 2L, 2L, 2L), .Label = c("", "2:00",
"4:00", "7:00"), class = "factor")), .Names = c("Group", "Time1",
"Gap"), class = "data.frame", row.names = c(NA, -12L))
首先,您需要创建 "Step" 列,它只是行号减一。
a %>%
mutate(Step=row_number()-1) %>%
然后,您需要通过删除冒号从给定的字符串中提取时间。 Str_replace 来自 library(stringr)
mutate(gap = as.numeric(str_replace(Gap, ":", ""))) %>%
过滤,只保留gap大于600的那些,对应的时间大于"6:00"
。
filter(gap > 600) %>%
然后,只保留 Group、Gap 和 Step。
select(Group, Gap, Step)
你的最终输出:
> df1 %>%
+ mutate(Step=row_number()-1) %>%
+ mutate(gap=as.numeric(str_replace(Gap, ":", ""))) %>%
+ filter(gap > 600) %>%
+ select(Group, Gap, Step)
Group Gap Step
1 A 12:00 5
通过 dplyr
、
的另一种方式
library(dplyr)
df %>%
mutate(Time1 = as.POSIXct(Time1, format = '%H:%M:%S'), step = row_number()-1) %>%
filter(Time1 - lag(Time1) > 6)
# Group Time1 Gap step
#1 A 2017-05-21 11:24:00 12:00 5
我试图总结两个变量之间的时间差距并找到列表的长度。
我的数据集是这样的。我想得到他们的差距低于 6:00 的步数。
Group Time1 Gap
A 11:00:00 AM
A 11:04:00 AM 4:00
A 11:06:00 AM 2:00
A 11:08:00 AM 2:00
A 11:12:00 AM 4:00
A 11:19:00 AM 7:00
A 11:26:00 AM 7:00
A 11:28:00 AM 2:00
A 11:30:00 AM 2:00
A 11:32:00 AM 2:00
A 11:34:00 AM 2:00
A 11:36:00 AM 2:00
最终结果应该是这样的;
Group Gap Step
A 12:00 4
如果间隔大于6:00我不想继续计算其他步数
我使用了过滤器选项“... %>% filter(gap < 8:00)%>% ...”但它没有用。我知道 cut point 会将这个列表分成两个独立的部分。
样本 DF:
structure(list(Group = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L), .Label = "A", class = "factor"), Time1 = structure(1:12, .Label = c("11:00:00 AM",
"11:04:00 AM", "11:06:00 AM", "11:08:00 AM", "11:12:00 AM", "11:19:00 AM",
"11:26:00 AM", "11:28:00 AM", "11:30:00 AM", "11:32:00 AM", "11:34:00 AM",
"11:36:00 AM"), class = "factor"), Gap = structure(c(1L, 3L,
2L, 2L, 3L, 4L, 4L, 2L, 2L, 2L, 2L, 2L), .Label = c("", "2:00",
"4:00", "7:00"), class = "factor")), .Names = c("Group", "Time1",
"Gap"), class = "data.frame", row.names = c(NA, -12L))
首先,您需要创建 "Step" 列,它只是行号减一。
a %>%
mutate(Step=row_number()-1) %>%
然后,您需要通过删除冒号从给定的字符串中提取时间。 Str_replace 来自 library(stringr)
mutate(gap = as.numeric(str_replace(Gap, ":", ""))) %>%
过滤,只保留gap大于600的那些,对应的时间大于"6:00"
。
filter(gap > 600) %>%
然后,只保留 Group、Gap 和 Step。
select(Group, Gap, Step)
你的最终输出:
> df1 %>%
+ mutate(Step=row_number()-1) %>%
+ mutate(gap=as.numeric(str_replace(Gap, ":", ""))) %>%
+ filter(gap > 600) %>%
+ select(Group, Gap, Step)
Group Gap Step
1 A 12:00 5
通过 dplyr
、
library(dplyr)
df %>%
mutate(Time1 = as.POSIXct(Time1, format = '%H:%M:%S'), step = row_number()-1) %>%
filter(Time1 - lag(Time1) > 6)
# Group Time1 Gap step
#1 A 2017-05-21 11:24:00 12:00 5