Р: Как выполнить сортировку по идентификатору, а затем определить заданную разницу c в одном и том же идентификаторе, а затем показать все содержимое в одном кадре данных? - PullRequest
0 голосов
/ 18 января 2020

Я задавал подобный вопрос ранее. R: Как отсортировать по идентификатору, а затем обнаружить разницу в пределах одного и того же идентификатора?

Но на этот раз я хочу показать указанные c идентификаторы образца в одном и том же идентификаторе. Мой фрейм данных

dataframe <- data.frame(ID=c("ID1","ID2","ID3","ID4", "ID2", "ID2", "ID3","ID4", "ID5","ID1"), 
                    sample_ID=c(1:10),sample_date=c(1991-05-23, 1991-05-24,1991-05-24, 1991-05-26,1991-05-27,1991-05-28,1991-05-30,1991-05-31, 1991-06-03, 1991-06-03), 
                    sex =c(1,2,1,2,2,2,1,2,1,1), and_so_on1 =c(1), and_so_on2 =c(0))

Отсюда я хочу отсортировать по одному и тому же идентификатору и определить, имеет ли тот же идентификатор очень близкое значение sample_date (например, в течение 1 дня для этого времени). И тогда я хочу показать результаты, подобные следующим:

outcome <- data.frame(ID=c("ID2","ID2"), sample_ID=c(5,6),sample_date=c(1991-05-26,1991-05-27),sex=c(2),and_so_on1 =c(1), and_so_on2 =c(0))

Пожалуйста, научите меня. Спасибо.

1 Ответ

1 голос
/ 18 января 2020

Вы можете сделать это, сравнивая текущую дату с предыдущей датой и дату начала с текущей датой. Когда это 1, вы выбираете запись.

dataframe <- data.frame(ID=c("ID1","ID2","ID3","ID4", "ID2", "ID2", "ID3","ID4", "ID5","ID1"), 
                        sample_ID=c(1:10),
                        sample_date=c("1991-05-23", "1991-05-24","1991-05-24", "1991-05-26","1991-05-27","1991-05-28","1991-05-30","1991-05-31", "1991-06-03", "1991-06-03"), 
                        sex =c(1,2,1,2,2,2,1,2,1,1), 
                        and_so_on1 =c(1), 
                        and_so_on2 =c(0))

library(dplyr)

dataframe %>%
  mutate(sample_date = as.Date(sample_date)) %>%
  arrange(ID, sample_date) %>%
  group_by(ID) %>% 
  filter((sample_date - lag(sample_date)) == 1 |
         (lead(sample_date) - sample_date) == 1)

# A tibble: 2 x 6
# Groups:   ID [1]
  ID    sample_ID sample_date   sex and_so_on1 and_so_on2
  <fct>     <int> <date>      <dbl>      <dbl>      <dbl>
1 ID2           5 1991-05-27      2          1          0
2 ID2           6 1991-05-28      2          1          0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...