提取R中的更改持续时间

提取R中的更改持续时间,r,R,因此,我有一个包含3列a(ID)、B(时间戳)和C(二进制)的表。我想知道ID在0到1之间的持续时间(我不认为从1到0)< /P> 我想要下表: ID Duration x (t3-t1)+(t7-t4) y t6-t5 您可以使用以下命令 但是,您需要找到处理NAs的方法。我在这里用0填充了它们 library(tidyr) df %>% group_by(A) %>% tidyr::spread(B,C) %>% mutate_at(vars(conta

因此,我有一个包含3列a(ID)、B(时间戳)和C(二进制)的表。我想知道ID在0到1之间的持续时间(我不认为从1到0)< /P> 我想要下表:

ID Duration
x (t3-t1)+(t7-t4)
y t6-t5

您可以使用以下命令

但是,您需要找到处理
NA
s的方法。我在这里用0填充了它们

library(tidyr)
df %>% 
  group_by(A) %>% 
  tidyr::spread(B,C) %>% 
  mutate_at(vars(contains("t")),funs(ifelse(is.na(.),0,.))) %>% 
  mutate(Duration=ifelse(A=="x",(t3-t1)+(t7-t4),t6-t5)) %>% 
  rename(ID=A) %>% 
 select(ID,Duration) %>% 
  ungroup()
结果:

# A tibble: 2 x 2
  ID    Duration
  <chr>    <dbl>
1 x            2
2 y            1 
     ID Duration
  <dbl>    <dbl>
1     1  6313653
2     2       64
#一个tible:2x2
ID持续时间
1 x 2
2 y 1

您可以使用以下命令

但是,您需要找到处理
NA
s的方法。我在这里用0填充了它们

library(tidyr)
df %>% 
  group_by(A) %>% 
  tidyr::spread(B,C) %>% 
  mutate_at(vars(contains("t")),funs(ifelse(is.na(.),0,.))) %>% 
  mutate(Duration=ifelse(A=="x",(t3-t1)+(t7-t4),t6-t5)) %>% 
  rename(ID=A) %>% 
 select(ID,Duration) %>% 
  ungroup()
结果:

# A tibble: 2 x 2
  ID    Duration
  <chr>    <dbl>
1 x            2
2 y            1 
     ID Duration
  <dbl>    <dbl>
1     1  6313653
2     2       64
#一个tible:2x2
ID持续时间
1 x 2
2 y 1

这就是你要找的吗

library(tidyverse)

df <-
  tibble(
    ID = c(1, 2, 1, 1, 2, 2, 1),
    Timestamp = c(1528362158, 1534675468, 1534675492, 1534675748, 1534675939, 1534676003, 1534676067),
    Binary = c(0, 1, 1, 0, 0, 1, 1)
  )

df %>%
  group_by(ID) %>%
  mutate(rn = row_number()) %>%
  spread(Binary, Timestamp) %>%
  fill(`0`, .direction = 'down') %>%
  drop_na() %>%
  mutate(Duration = `1` - `0`) %>%
  summarise(Duration = sum(Duration))
库(tidyverse)
df%
分组依据(ID)%>%
变异(rn=行数())%>%
排列(二进制,时间戳)%>%
填充(`0`,方向='down')%>%
下拉菜单()%>%
变异(持续时间=`1`-`0`)%>%
总结(持续时间=总和(持续时间))
结果:

# A tibble: 2 x 2
  ID    Duration
  <chr>    <dbl>
1 x            2
2 y            1 
     ID Duration
  <dbl>    <dbl>
1     1  6313653
2     2       64
ID持续时间
1     1  6313653
2     2       64

这就是你要找的吗

library(tidyverse)

df <-
  tibble(
    ID = c(1, 2, 1, 1, 2, 2, 1),
    Timestamp = c(1528362158, 1534675468, 1534675492, 1534675748, 1534675939, 1534676003, 1534676067),
    Binary = c(0, 1, 1, 0, 0, 1, 1)
  )

df %>%
  group_by(ID) %>%
  mutate(rn = row_number()) %>%
  spread(Binary, Timestamp) %>%
  fill(`0`, .direction = 'down') %>%
  drop_na() %>%
  mutate(Duration = `1` - `0`) %>%
  summarise(Duration = sum(Duration))
库(tidyverse)
df%
分组依据(ID)%>%
变异(rn=行数())%>%
排列(二进制,时间戳)%>%
填充(`0`,方向='down')%>%
下拉菜单()%>%
变异(持续时间=`1`-`0`)%>%
总结(持续时间=总和(持续时间))
结果:

# A tibble: 2 x 2
  ID    Duration
  <chr>    <dbl>
1 x            2
2 y            1 
     ID Duration
  <dbl>    <dbl>
1     1  6313653
2     2       64
ID持续时间
1     1  6313653
2     2       64


t1,t2
应该是
数值的
字符的
?编程问题在哪里?t1,t2,时间是否可以添加期望的数值(如果有)?我添加了t1,t2,…的值是
t1,t2
应该是
数字
字符
?编程问题在哪里?t1,t2,时间戳是否允许添加预期的数值(如果有)?我添加了t1,t2,…这似乎是理想的解决方案。我应该提到ID也可以是数字的,所以我得到了一个错误:“group_by_uu”没有适用的方法应用于类“c('integer','numeric')”@MarGa的对象<代码>分组依据可应用于数值向量。检查我的eddited答案。@Pawel当我尝试你的例子时,当我用数据帧的列(ID=MyDF$ID…)更改ID、时间戳和二进制时,它会起作用。它不起作用。知道我有一个超过400万次观测的巨大框架,我得到了以下信息:=============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================。。。使用2个变量:ID、Duration,我还使用slice(1:150)对前150个观察值进行了切片,并进行了测试,但它不起作用。我还将列转换为双精度,以防出现错误。我做错什么了?我还得到了#一个tibble:0x2#。。。对于2个变量:ID,Duration,这似乎是理想的解决方案。我应该提到ID也可以是数字的,所以我得到了这个错误:没有适用于“c('integer','numeric')”@MarGa类对象的“group_by_uu”的方法<代码>分组依据可应用于数值向量。检查我的eddited答案。@Pawel当我尝试你的例子时,当我用数据帧的列(ID=MyDF$ID…)更改ID、时间戳和二进制时,它会起作用。它不起作用。知道我有一个超过400万次观测的巨大框架,我得到了以下信息:=============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================。。。使用2个变量:ID、Duration,我还使用slice(1:150)对前150个观察值进行了切片,并进行了测试,但它不起作用。我还将列转换为双精度,以防出现错误。我做错什么了?我还得到了#一个tibble:0x2#。。。有两个变量:ID、持续时间