Извлечь продолжительность изменения в R - PullRequest
0 голосов
/ 25 февраля 2019

Итак, у меня есть таблица с 3 столбцами A (ID), B (временная метка) и C (двоичная).Я хотел бы знать, сколько времени занимает ID от 0 до 1 (я не считаю от 1 до 0)

A B C
x t1 0 #(t1=1528362158)
y t2 1 #(t2=1534675468)
x t3 1 #(t3=1534675492)
x t4 0 #(t4=1534675748)
y t5 0 #(t5=1534675939)
y t6 1 #(t6=1534676003)
x t7 1 #(t7=1534676067)

Я хотел бы иметь следующую таблицу:

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

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Это то, что вы ищете?

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))

Результат:

     ID Duration
  <dbl>    <dbl>
1     1  6313653
2     2       64
0 голосов
/ 25 февраля 2019

Вы можете использовать следующее.

Однако вам нужно найти способы борьбы с 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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...