Как в R извлечь определенные строки из списка наборов данных? - PullRequest
0 голосов
/ 16 июня 2020
> str(pc)
'data.frame':   562 obs. of  9 variables:
 $ id        : int  1 2 3 4 5 10 12 17 19 22 ...
 $ gender    : chr  "M" "F" "M" "M" ...
 $ birth_year: int  1973 1974 1937 1943 1958 1958 1940 1973 1971 1950 ...
 $ type      : chr  "spontaneous SAH" "traumatic SAH" "spontaneous SAH" "traumatic SAH" ...
 $ admit_year: int  2011 2011 2016 2012 2018 2017 2010 2018 2016 2018 ...
 $ admit_date: chr  "2011-06-22" "2011-12-19" "2016-12-06" "2012-10-28" ...
 $ admitage  : int  38 37 79 69 60 59 70 45 45 68 ...
 $ death_date: chr  NA NA NA "2012-10-28" ...
 $ death_year: int  NA NA NA 2012 NA NA NA NA 2016 NA ...

Здравствуйте. У меня есть список, который выглядит примерно так. Столбец «id» указывает идентификаторы пациентов. Но есть ряды с одинаковыми ID, потому что некоторые пациенты попадали в больницу несколько раз. Как удалить дубликаты и оставить по одной строке для каждого идентификатора? Я пробовал это

c <- unique(pc$id)

, чтобы извлечь номера "id", но я не знаю, что делать дальше. Я новичок, поэтому был бы признателен, если бы вы могли объяснить мне это простыми кодами!

РЕДАКТИРОВАТЬ: Я хочу составить один список, содержащий списки с начальными датами приема пациентов, а другой список, содержащий те, с окончательными допустимыми датами? Как я могу это сделать? Этот список находится в порядке идентификаторов, но если один пациент поступал несколько раз, дата не обязательно в хронологическом порядке. Я хотел бы знать, как я могу добиться этого, просто используя! Duplicated.

Ответы [ 2 ]

0 голосов
/ 16 июня 2020
library(tidyverse)

data <- tibble::tribble(
  ~id, ~gender, ~birth_year, ~admit_year,
  1,    "M",     1973,     2014,    
  2,    "F",     1974,    2016,     
  3,    "M",     1958,     2013,
  2,     "F",     1974,     2017,
  1,     "M",    1973,    2011,
  1,     "M",    1973,    2020,
  1,     "M",    1973,    2018,
  2,     "F",     1974,     2009,
)

data
# A tibble: 8 x 4
     id gender birth_year admit_year
  <dbl> <chr>       <dbl>      <dbl>
1     1 M            1973       2014
2     2 F            1974       2016
3     3 M            1958       2013
4     2 F            1974       2017
5     1 M            1973       2011
6     1 M            1973       2020
7     1 M            1973       2018
8     2 F            1974       2009

для сохранения первой и последней строки (год первого допуска и год последнего допуска) по идентификатору

df <- data %>% 
  # I will keep the patient with the last admit year
  arrange(admit_year) %>% 
  # I group by id
  group_by(id) %>% 
  # to keep the first and last row (first admit year and last admit year) by id
  slice(unique(c(1, n())))

df
# A tibble: 5 x 4
# Groups:   id [3]
     id gender birth_year admit_year
  <dbl> <chr>       <dbl>      <dbl>
1     1 M            1973       2011
2     1 M            1973       2020
3     2 F            1974       2009
4     2 F            1974       2017
5     3 M            1958       2013

для сохранения последней строки (год последнего допуска) по идентификатору

df2 <- data %>% 
  # I will keep the patient with the last admit year
  arrange(admit_year) %>% 
  # I group by id
  group_by(id) %>% 
  # to keep the last row (last admit year) by id
  slice(n())

df2
# A tibble: 3 x 4
# Groups:   id [3]
     id gender birth_year admit_year
  <dbl> <chr>       <dbl>      <dbl>
1     1 M            1973       2020
2     2 F            1974       2017
3     3 M            1958       2013

для сохранения первой строки (год первого допуска) по id

df3 <- data %>% 
  # I will keep the patient with the last admit year
  arrange(admit_year) %>% 
  # I group by id
  group_by(id) %>% 
  # to keep the first row (first admit year) by id
  slice(1)

df3
# A tibble: 3 x 4
# Groups:   id [3]
     id gender birth_year admit_year
  <dbl> <chr>       <dbl>      <dbl>
1     1 M            1973       2011
2     2 F            1974       2009
3     3 M            1958       2013
0 голосов
/ 16 июня 2020

Должно получиться что-то вроде этого: pc[!duplicated(pc$id),]. По умолчанию будет сохранено первое вхождение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...