DataFrame

library(readr)
exercise_sample <- read_csv("https://raw.githubusercontent.com/ywchiu/cdc_course/master/data/exercise_sample.csv", 
    col_types = cols(report_id = col_character()))
head(exercise_sample)
## # A tibble: 6 × 19
##   report_id      age 是否境外移入 GENDER 通報日              發病日             
##   <chr>        <dbl> <chr>        <chr>  <dttm>              <dttm>             
## 1 10000590510…    55 是           F      2023-02-18 00:00:00 2023-02-18 00:00:00
## 2 10000018414…    10 否           F      2023-02-18 00:00:00 2023-02-18 00:00:00
## 3 10000050846…    35 否           F      2023-02-18 00:00:00 2023-02-18 00:00:00
## 4 10000663290…    45 否           F      2023-02-18 00:00:00 2023-02-18 00:00:00
## 5 10000784503…    35 否           M      2023-02-18 00:00:00 2023-02-18 00:00:00
## 6 10000396145…    35 否           M      2023-02-18 00:00:00 2023-02-18 00:00:00
## # ℹ 13 more variables: 研判日 <dttm>, 縣市 <chr>, 鄉鎮市區 <chr>, 職業 <chr>,
## #   有無慢性疾病病史及相關危險因子 <chr>, 是否使用ECMO <chr>,
## #   `首次使>用ECMO日` <lgl>, 是否插管 <chr>, 首次插管日 <lgl>,
## #   首次入住加護病房日 <chr>, 快篩 <chr>, PCR <chr>, CT值 <lgl>
class(exercise_sample)
## [1] "spec_tbl_df" "tbl_df"      "tbl"         "data.frame"
str(exercise_sample)
## spc_tbl_ [100 × 19] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ report_id                     : chr [1:100] "10000590510349" "10000018414615" "10000050846608" "10000663290039" ...
##  $ age                           : num [1:100] 55 10 35 45 35 35 20 30 95 15 ...
##  $ 是否境外移入                  : chr [1:100] "是" "否" "否" "否" ...
##  $ GENDER                        : chr [1:100] "F" "F" "F" "F" ...
##  $ 通報日                        : POSIXct[1:100], format: "2023-02-18" "2023-02-18" ...
##  $ 發病日                        : POSIXct[1:100], format: "2023-02-18" "2023-02-18" ...
##  $ 研判日                        : POSIXct[1:100], format: "2023-02-18 02:35:16" "2023-02-18 02:35:12" ...
##  $ 縣市                          : chr [1:100] "連江縣" "連江縣" "連江縣" "連江縣" ...
##  $ 鄉鎮市區                      : chr [1:100] "北竿鄉" "北竿鄉" "北竿鄉" "北竿鄉" ...
##  $ 職業                          : chr [1:100] NA NA NA NA ...
##  $ 有無慢性疾病病史及相關危險因子: chr [1:100] "無" "無" "無" "有" ...
##  $ 是否使用ECMO                  : chr [1:100] "否" "否" "否" "否" ...
##  $ 首次使>用ECMO日               : logi [1:100] NA NA NA NA NA NA ...
##  $ 是否插管                      : chr [1:100] "否" "否" "否" "否" ...
##  $ 首次插管日                    : logi [1:100] NA NA NA NA NA NA ...
##  $ 首次入住加護病房日            : chr [1:100] "無入住" "無入住" "無入住" "無入住" ...
##  $ 快篩                          : chr [1:100] "陽性" "陽性" "陽性" "陽性" ...
##  $ PCR                           : chr [1:100] "未檢驗" "未檢驗" "未檢驗" "未檢驗" ...
##  $ CT值                          : logi [1:100] NA NA NA NA NA NA ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   report_id = col_character(),
##   ..   age = col_double(),
##   ..   是否境外移入 = col_character(),
##   ..   GENDER = col_character(),
##   ..   通報日 = col_datetime(format = ""),
##   ..   發病日 = col_datetime(format = ""),
##   ..   研判日 = col_datetime(format = ""),
##   ..   縣市 = col_character(),
##   ..   鄉鎮市區 = col_character(),
##   ..   職業 = col_character(),
##   ..   有無慢性疾病病史及相關危險因子 = col_character(),
##   ..   是否使用ECMO = col_character(),
##   ..   `首次使>用ECMO日` = col_logical(),
##   ..   是否插管 = col_character(),
##   ..   首次插管日 = col_logical(),
##   ..   首次入住加護病房日 = col_character(),
##   ..   快篩 = col_character(),
##   ..   PCR = col_character(),
##   ..   CT值 = col_logical()
##   .. )
##  - attr(*, "problems")=<externalptr>
summary(exercise_sample)
##   report_id              age        是否境外移入          GENDER         
##  Length:100         Min.   : 5.00   Length:100         Length:100        
##  Class :character   1st Qu.:18.75   Class :character   Class :character  
##  Mode  :character   Median :30.00   Mode  :character   Mode  :character  
##                     Mean   :31.25                                        
##                     3rd Qu.:41.25                                        
##                     Max.   :95.00                                        
##      通報日                        發病日                   
##  Min.   :2023-02-14 00:00:00   Min.   :2023-02-14 00:00:00  
##  1st Qu.:2023-02-22 00:00:00   1st Qu.:2023-02-22 00:00:00  
##  Median :2023-02-28 00:00:00   Median :2023-02-28 00:00:00  
##  Mean   :2023-02-28 15:07:12   Mean   :2023-02-28 15:07:12  
##  3rd Qu.:2023-03-03 00:00:00   3rd Qu.:2023-03-03 00:00:00  
##  Max.   :2023-03-20 00:00:00   Max.   :2023-03-20 00:00:00  
##      研判日                           縣市             鄉鎮市區        
##  Min.   :2023-02-18 02:34:57.00   Length:100         Length:100        
##  1st Qu.:2023-02-22 17:26:26.00   Class :character   Class :character  
##  Median :2023-02-28 01:31:38.00   Mode  :character   Mode  :character  
##  Mean   :2023-03-01 07:50:41.51                                        
##  3rd Qu.:2023-03-03 22:26:25.25                                        
##  Max.   :2023-03-20 09:51:11.00                                        
##      職業           有無慢性疾病病史及相關危險因子 是否使用ECMO      
##  Length:100         Length:100                     Length:100        
##  Class :character   Class :character               Class :character  
##  Mode  :character   Mode  :character               Mode  :character  
##                                                                      
##                                                                      
##                                                                      
##  首次使>用ECMO日   是否插管         首次插管日     首次入住加護病房日
##  Mode:logical    Length:100         Mode:logical   Length:100        
##  NA's:100        Class :character   NA's:100       Class :character  
##                  Mode  :character                  Mode  :character  
##                                                                      
##                                                                      
##                                                                      
##      快篩               PCR              CT值        
##  Length:100         Length:100         Mode:logical  
##  Class :character   Class :character   NA's:100      
##  Mode  :character   Mode  :character                 
##                                                      
##                                                      
## 
exercise_sample$是否境外移入 <- as.factor(exercise_sample$是否境外移入)
summary(exercise_sample)
##   report_id              age        是否境外移入    GENDER         
##  Length:100         Min.   : 5.00   否:94        Length:100        
##  Class :character   1st Qu.:18.75   是: 6        Class :character  
##  Mode  :character   Median :30.00                Mode  :character  
##                     Mean   :31.25                                  
##                     3rd Qu.:41.25                                  
##                     Max.   :95.00                                  
##      通報日                        發病日                   
##  Min.   :2023-02-14 00:00:00   Min.   :2023-02-14 00:00:00  
##  1st Qu.:2023-02-22 00:00:00   1st Qu.:2023-02-22 00:00:00  
##  Median :2023-02-28 00:00:00   Median :2023-02-28 00:00:00  
##  Mean   :2023-02-28 15:07:12   Mean   :2023-02-28 15:07:12  
##  3rd Qu.:2023-03-03 00:00:00   3rd Qu.:2023-03-03 00:00:00  
##  Max.   :2023-03-20 00:00:00   Max.   :2023-03-20 00:00:00  
##      研判日                           縣市             鄉鎮市區        
##  Min.   :2023-02-18 02:34:57.00   Length:100         Length:100        
##  1st Qu.:2023-02-22 17:26:26.00   Class :character   Class :character  
##  Median :2023-02-28 01:31:38.00   Mode  :character   Mode  :character  
##  Mean   :2023-03-01 07:50:41.51                                        
##  3rd Qu.:2023-03-03 22:26:25.25                                        
##  Max.   :2023-03-20 09:51:11.00                                        
##      職業           有無慢性疾病病史及相關危險因子 是否使用ECMO      
##  Length:100         Length:100                     Length:100        
##  Class :character   Class :character               Class :character  
##  Mode  :character   Mode  :character               Mode  :character  
##                                                                      
##                                                                      
##                                                                      
##  首次使>用ECMO日   是否插管         首次插管日     首次入住加護病房日
##  Mode:logical    Length:100         Mode:logical   Length:100        
##  NA's:100        Class :character   NA's:100       Class :character  
##                  Mode  :character                  Mode  :character  
##                                                                      
##                                                                      
##                                                                      
##      快篩               PCR              CT值        
##  Length:100         Length:100         Mode:logical  
##  Class :character   Class :character   NA's:100      
##  Mode  :character   Mode  :character                 
##                                                      
##                                                      
## 
head(exercise_sample)
## # A tibble: 6 × 19
##   report_id      age 是否境外移入 GENDER 通報日              發病日             
##   <chr>        <dbl> <fct>        <chr>  <dttm>              <dttm>             
## 1 10000590510…    55 是           F      2023-02-18 00:00:00 2023-02-18 00:00:00
## 2 10000018414…    10 否           F      2023-02-18 00:00:00 2023-02-18 00:00:00
## 3 10000050846…    35 否           F      2023-02-18 00:00:00 2023-02-18 00:00:00
## 4 10000663290…    45 否           F      2023-02-18 00:00:00 2023-02-18 00:00:00
## 5 10000784503…    35 否           M      2023-02-18 00:00:00 2023-02-18 00:00:00
## 6 10000396145…    35 否           M      2023-02-18 00:00:00 2023-02-18 00:00:00
## # ℹ 13 more variables: 研判日 <dttm>, 縣市 <chr>, 鄉鎮市區 <chr>, 職業 <chr>,
## #   有無慢性疾病病史及相關危險因子 <chr>, 是否使用ECMO <chr>,
## #   `首次使>用ECMO日` <lgl>, 是否插管 <chr>, 首次插管日 <lgl>,
## #   首次入住加護病房日 <chr>, 快篩 <chr>, PCR <chr>, CT值 <lgl>
head(exercise_sample, 10 )
## # A tibble: 10 × 19
##    report_id     age 是否境外移入 GENDER 通報日              發病日             
##    <chr>       <dbl> <fct>        <chr>  <dttm>              <dttm>             
##  1 1000059051…    55 是           F      2023-02-18 00:00:00 2023-02-18 00:00:00
##  2 1000001841…    10 否           F      2023-02-18 00:00:00 2023-02-18 00:00:00
##  3 1000005084…    35 否           F      2023-02-18 00:00:00 2023-02-18 00:00:00
##  4 1000066329…    45 否           F      2023-02-18 00:00:00 2023-02-18 00:00:00
##  5 1000078450…    35 否           M      2023-02-18 00:00:00 2023-02-18 00:00:00
##  6 1000039614…    35 否           M      2023-02-18 00:00:00 2023-02-18 00:00:00
##  7 1000089817…    20 否           F      2023-02-18 00:00:00 2023-02-18 00:00:00
##  8 1000005881…    30 否           F      2023-02-19 00:00:00 2023-02-19 00:00:00
##  9 1000011467…    95 否           F      2023-02-19 00:00:00 2023-02-19 00:00:00
## 10 1000071711…    15 否           M      2023-02-20 00:00:00 2023-02-20 00:00:00
## # ℹ 13 more variables: 研判日 <dttm>, 縣市 <chr>, 鄉鎮市區 <chr>, 職業 <chr>,
## #   有無慢性疾病病史及相關危險因子 <chr>, 是否使用ECMO <chr>,
## #   `首次使>用ECMO日` <lgl>, 是否插管 <chr>, 首次插管日 <lgl>,
## #   首次入住加護病房日 <chr>, 快篩 <chr>, PCR <chr>, CT值 <lgl>
#?head
tail(exercise_sample)
## # A tibble: 6 × 19
##   report_id      age 是否境外移入 GENDER 通報日              發病日             
##   <chr>        <dbl> <fct>        <chr>  <dttm>              <dttm>             
## 1 10000075027…    30 否           F      2023-03-17 00:00:00 2023-03-17 00:00:00
## 2 10000229938…    50 否           M      2023-03-17 00:00:00 2023-03-17 00:00:00
## 3 10000907653…    45 否           F      2023-03-17 00:00:00 2023-03-17 00:00:00
## 4 10000923309…    35 否           F      2023-03-19 00:00:00 2023-03-19 00:00:00
## 5 10000050379…    20 否           F      2023-03-15 00:00:00 2023-03-15 00:00:00
## 6 10000068294…    25 否           F      2023-03-20 00:00:00 2023-03-20 00:00:00
## # ℹ 13 more variables: 研判日 <dttm>, 縣市 <chr>, 鄉鎮市區 <chr>, 職業 <chr>,
## #   有無慢性疾病病史及相關危險因子 <chr>, 是否使用ECMO <chr>,
## #   `首次使>用ECMO日` <lgl>, 是否插管 <chr>, 首次插管日 <lgl>,
## #   首次入住加護病房日 <chr>, 快篩 <chr>, PCR <chr>, CT值 <lgl>
exercise_sample[1:3, ]
## # A tibble: 3 × 19
##   report_id      age 是否境外移入 GENDER 通報日              發病日             
##   <chr>        <dbl> <fct>        <chr>  <dttm>              <dttm>             
## 1 10000590510…    55 是           F      2023-02-18 00:00:00 2023-02-18 00:00:00
## 2 10000018414…    10 否           F      2023-02-18 00:00:00 2023-02-18 00:00:00
## 3 10000050846…    35 否           F      2023-02-18 00:00:00 2023-02-18 00:00:00
## # ℹ 13 more variables: 研判日 <dttm>, 縣市 <chr>, 鄉鎮市區 <chr>, 職業 <chr>,
## #   有無慢性疾病病史及相關危險因子 <chr>, 是否使用ECMO <chr>,
## #   `首次使>用ECMO日` <lgl>, 是否插管 <chr>, 首次插管日 <lgl>,
## #   首次入住加護病房日 <chr>, 快篩 <chr>, PCR <chr>, CT值 <lgl>
exercise_sample[1:3, 1]
## # A tibble: 3 × 1
##   report_id     
##   <chr>         
## 1 10000590510349
## 2 10000018414615
## 3 10000050846608
exercise_sample[1:3, "report_id"]
## # A tibble: 3 × 1
##   report_id     
##   <chr>         
## 1 10000590510349
## 2 10000018414615
## 3 10000050846608
exercise_sample[1:3, c("report_id", "age") ]
## # A tibble: 3 × 2
##   report_id        age
##   <chr>          <dbl>
## 1 10000590510349    55
## 2 10000018414615    10
## 3 10000050846608    35
exercise_sample[1:3, 1:2 ]
## # A tibble: 3 × 2
##   report_id        age
##   <chr>          <dbl>
## 1 10000590510349    55
## 2 10000018414615    10
## 3 10000050846608    35
head(exercise_sample$report_id)
## [1] "10000590510349" "10000018414615" "10000050846608" "10000663290039"
## [5] "10000784503625" "10000396145701"
df <- exercise_sample[1:5, c("report_id", 'age')]
df
## # A tibble: 5 × 2
##   report_id        age
##   <chr>          <dbl>
## 1 10000590510349    55
## 2 10000018414615    10
## 3 10000050846608    35
## 4 10000663290039    45
## 5 10000784503625    35
exercise_sample$age > 30 
##   [1]  TRUE FALSE  TRUE  TRUE  TRUE  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE
##  [13]  TRUE  TRUE FALSE  TRUE  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE
##  [25]  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE FALSE FALSE FALSE  TRUE FALSE
##  [37] FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE FALSE FALSE
##  [49] FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE
##  [61] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [73]  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE
##  [85]  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE  TRUE
##  [97]  TRUE  TRUE FALSE FALSE
exercise_sample[exercise_sample$age > 30, ]
## # A tibble: 38 × 19
##    report_id     age 是否境外移入 GENDER 通報日              發病日             
##    <chr>       <dbl> <fct>        <chr>  <dttm>              <dttm>             
##  1 1000059051…    55 是           F      2023-02-18 00:00:00 2023-02-18 00:00:00
##  2 1000005084…    35 否           F      2023-02-18 00:00:00 2023-02-18 00:00:00
##  3 1000066329…    45 否           F      2023-02-18 00:00:00 2023-02-18 00:00:00
##  4 1000078450…    35 否           M      2023-02-18 00:00:00 2023-02-18 00:00:00
##  5 1000039614…    35 否           M      2023-02-18 00:00:00 2023-02-18 00:00:00
##  6 1000011467…    95 否           F      2023-02-19 00:00:00 2023-02-19 00:00:00
##  7 1000021250…    40 否           F      2023-02-20 00:00:00 2023-02-20 00:00:00
##  8 1000093623…    55 否           M      2023-02-14 00:00:00 2023-02-14 00:00:00
##  9 1000067902…    35 否           F      2023-02-20 00:00:00 2023-02-20 00:00:00
## 10 1000038195…    50 否           F      2023-02-20 00:00:00 2023-02-20 00:00:00
## # ℹ 28 more rows
## # ℹ 13 more variables: 研判日 <dttm>, 縣市 <chr>, 鄉鎮市區 <chr>, 職業 <chr>,
## #   有無慢性疾病病史及相關危險因子 <chr>, 是否使用ECMO <chr>,
## #   `首次使>用ECMO日` <lgl>, 是否插管 <chr>, 首次插管日 <lgl>,
## #   首次入住加護病房日 <chr>, 快篩 <chr>, PCR <chr>, CT值 <lgl>
which(exercise_sample$age > 30)
##  [1]  1  3  4  5  6  9 13 14 16 17 20 23 25 26 27 28 30 31 35 40 41 42 43 45 46
## [26] 55 58 63 73 79 82 85 86 92 94 96 97 98
exercise_sample[which(exercise_sample$age > 30), ]
## # A tibble: 38 × 19
##    report_id     age 是否境外移入 GENDER 通報日              發病日             
##    <chr>       <dbl> <fct>        <chr>  <dttm>              <dttm>             
##  1 1000059051…    55 是           F      2023-02-18 00:00:00 2023-02-18 00:00:00
##  2 1000005084…    35 否           F      2023-02-18 00:00:00 2023-02-18 00:00:00
##  3 1000066329…    45 否           F      2023-02-18 00:00:00 2023-02-18 00:00:00
##  4 1000078450…    35 否           M      2023-02-18 00:00:00 2023-02-18 00:00:00
##  5 1000039614…    35 否           M      2023-02-18 00:00:00 2023-02-18 00:00:00
##  6 1000011467…    95 否           F      2023-02-19 00:00:00 2023-02-19 00:00:00
##  7 1000021250…    40 否           F      2023-02-20 00:00:00 2023-02-20 00:00:00
##  8 1000093623…    55 否           M      2023-02-14 00:00:00 2023-02-14 00:00:00
##  9 1000067902…    35 否           F      2023-02-20 00:00:00 2023-02-20 00:00:00
## 10 1000038195…    50 否           F      2023-02-20 00:00:00 2023-02-20 00:00:00
## # ℹ 28 more rows
## # ℹ 13 more variables: 研判日 <dttm>, 縣市 <chr>, 鄉鎮市區 <chr>, 職業 <chr>,
## #   有無慢性疾病病史及相關危險因子 <chr>, 是否使用ECMO <chr>,
## #   `首次使>用ECMO日` <lgl>, 是否插管 <chr>, 首次插管日 <lgl>,
## #   首次入住加護病房日 <chr>, 快篩 <chr>, PCR <chr>, CT值 <lgl>
sort(exercise_sample$age)
##   [1]  5  5  5  5  5 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 15 15 15 15
##  [26] 20 20 20 20 20 20 20 20 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 30
##  [51] 30 30 30 30 30 30 30 30 30 30 30 30 35 35 35 35 35 35 35 35 40 40 40 40 40
##  [76] 45 45 45 45 50 50 50 50 50 50 55 55 55 55 55 60 60 60 60 70 70 70 75 75 95
sort(exercise_sample$age, decreasing = TRUE)
##   [1] 95 75 75 70 70 70 60 60 60 60 55 55 55 55 55 50 50 50 50 50 50 45 45 45 45
##  [26] 40 40 40 40 40 35 35 35 35 35 35 35 35 30 30 30 30 30 30 30 30 30 30 30 30
##  [51] 30 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 20 20 20 20 20 20 20 20
##  [76] 15 15 15 15 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10  5  5  5  5  5
#order(exercise_sample$age)
a <- c(50,60,70,20,30,80,65)
sort(a)
## [1] 20 30 50 60 65 70 80
order(a)
## [1] 4 5 1 2 7 3 6
a[order(a)]
## [1] 20 30 50 60 65 70 80
exercise_sample[order(exercise_sample$age), ]
## # A tibble: 100 × 19
##    report_id     age 是否境外移入 GENDER 通報日              發病日             
##    <chr>       <dbl> <fct>        <chr>  <dttm>              <dttm>             
##  1 1000067549…     5 否           F      2023-02-20 00:00:00 2023-02-20 00:00:00
##  2 1000034958…     5 否           F      2023-02-20 00:00:00 2023-02-20 00:00:00
##  3 1000081321…     5 否           M      2023-03-01 00:00:00 2023-03-01 00:00:00
##  4 1000002221…     5 否           M      2023-03-02 00:00:00 2023-03-02 00:00:00
##  5 1000017452…     5 否           M      2023-03-16 00:00:00 2023-03-16 00:00:00
##  6 1000001841…    10 否           F      2023-02-18 00:00:00 2023-02-18 00:00:00
##  7 1000051298…    10 否           F      2023-02-20 00:00:00 2023-02-20 00:00:00
##  8 1000036914…    10 是           F      2023-02-22 00:00:00 2023-02-22 00:00:00
##  9 1000084204…    10 否           F      2023-02-22 00:00:00 2023-02-22 00:00:00
## 10 1000012458…    10 否           F      2023-02-22 00:00:00 2023-02-22 00:00:00
## # ℹ 90 more rows
## # ℹ 13 more variables: 研判日 <dttm>, 縣市 <chr>, 鄉鎮市區 <chr>, 職業 <chr>,
## #   有無慢性疾病病史及相關危險因子 <chr>, 是否使用ECMO <chr>,
## #   `首次使>用ECMO日` <lgl>, 是否插管 <chr>, 首次插管日 <lgl>,
## #   首次入住加護病房日 <chr>, 快篩 <chr>, PCR <chr>, CT值 <lgl>
exercise_sample[order(exercise_sample$age, decreasing = TRUE), ]
## # A tibble: 100 × 19
##    report_id     age 是否境外移入 GENDER 通報日              發病日             
##    <chr>       <dbl> <fct>        <chr>  <dttm>              <dttm>             
##  1 1000011467…    95 否           F      2023-02-19 00:00:00 2023-02-19 00:00:00
##  2 1000090701…    75 否           M      2023-02-22 00:00:00 2023-02-22 00:00:00
##  3 1000035867…    75 否           M      2023-03-01 00:00:00 2023-03-01 00:00:00
##  4 1000009427…    70 否           M      2023-02-21 00:00:00 2023-02-21 00:00:00
##  5 1000027849…    70 否           F      2023-02-27 00:00:00 2023-02-27 00:00:00
##  6 1000081792…    70 否           M      2023-03-03 00:00:00 2023-03-03 00:00:00
##  7 1000053363…    60 否           M      2023-02-22 00:00:00 2023-02-22 00:00:00
##  8 1000019326…    60 否           M      2023-02-23 00:00:00 2023-02-23 00:00:00
##  9 1000023009…    60 否           F      2023-02-26 00:00:00 2023-02-26 00:00:00
## 10 1000092338…    60 否           M      2023-02-27 00:00:00 2023-02-27 00:00:00
## # ℹ 90 more rows
## # ℹ 13 more variables: 研判日 <dttm>, 縣市 <chr>, 鄉鎮市區 <chr>, 職業 <chr>,
## #   有無慢性疾病病史及相關危險因子 <chr>, 是否使用ECMO <chr>,
## #   `首次使>用ECMO日` <lgl>, 是否插管 <chr>, 首次插管日 <lgl>,
## #   首次入住加護病房日 <chr>, 快篩 <chr>, PCR <chr>, CT值 <lgl>
# exercise_sample$age > 60
sum(exercise_sample$age > 60)
## [1] 6
length(which(exercise_sample$age > 60))
## [1] 6
nrow(exercise_sample[exercise_sample$age > 60, ])
## [1] 6
#str(exercise_sample)

資料清理

# 創建一個包含缺失值的向量
data <- c(10, NA, 25, 30, NA)
data
## [1] 10 NA 25 30 NA
# 判斷缺失值
is_na <- is.na(data)

print(is_na) # 輸出: FALSE  TRUE FALSE FALSE  TRUE
## [1] FALSE  TRUE FALSE FALSE  TRUE
#is.na(exercise_sample)
sum(is.na(exercise_sample$report_id))
## [1] 0
sum(is.na(exercise_sample$age))
## [1] 0
colSums(is.na(exercise_sample))
##                      report_id                            age 
##                              0                              0 
##                   是否境外移入                         GENDER 
##                              0                              0 
##                         通報日                         發病日 
##                              0                              0 
##                         研判日                           縣市 
##                              0                              0 
##                       鄉鎮市區                           職業 
##                              0                             91 
## 有無慢性疾病病史及相關危險因子                   是否使用ECMO 
##                              3                              0 
##                首次使>用ECMO日                       是否插管 
##                            100                              0 
##                     首次插管日             首次入住加護病房日 
##                            100                              0 
##                           快篩                            PCR 
##                              0                              0 
##                           CT值 
##                            100

刪除缺失值

df <- data.frame(
 name = c("John", "Jane", "Michael", "Emily", NA),
 age = c(30, 25, 40, NA, 50)
)
df
##      name age
## 1    John  30
## 2    Jane  25
## 3 Michael  40
## 4   Emily  NA
## 5    <NA>  50
na.omit(df)
##      name age
## 1    John  30
## 2    Jane  25
## 3 Michael  40
cleaned_sample<- na.omit(exercise_sample)
cleaned_sample
## # A tibble: 0 × 19
## # ℹ 19 variables: report_id <chr>, age <dbl>, 是否境外移入 <fct>, GENDER <chr>,
## #   通報日 <dttm>, 發病日 <dttm>, 研判日 <dttm>, 縣市 <chr>, 鄉鎮市區 <chr>,
## #   職業 <chr>, 有無慢性疾病病史及相關危險因子 <chr>, 是否使用ECMO <chr>,
## #   首次使>用ECMO日 <lgl>, 是否插管 <chr>, 首次插管日 <lgl>,
## #   首次入住加護病房日 <chr>, 快篩 <chr>, PCR <chr>, CT值 <lgl>
exercise_sample[!is.na(exercise_sample$有無慢性疾病病史及相關危險因子), ]
## # A tibble: 97 × 19
##    report_id     age 是否境外移入 GENDER 通報日              發病日             
##    <chr>       <dbl> <fct>        <chr>  <dttm>              <dttm>             
##  1 1000059051…    55 是           F      2023-02-18 00:00:00 2023-02-18 00:00:00
##  2 1000001841…    10 否           F      2023-02-18 00:00:00 2023-02-18 00:00:00
##  3 1000005084…    35 否           F      2023-02-18 00:00:00 2023-02-18 00:00:00
##  4 1000066329…    45 否           F      2023-02-18 00:00:00 2023-02-18 00:00:00
##  5 1000078450…    35 否           M      2023-02-18 00:00:00 2023-02-18 00:00:00
##  6 1000039614…    35 否           M      2023-02-18 00:00:00 2023-02-18 00:00:00
##  7 1000089817…    20 否           F      2023-02-18 00:00:00 2023-02-18 00:00:00
##  8 1000005881…    30 否           F      2023-02-19 00:00:00 2023-02-19 00:00:00
##  9 1000011467…    95 否           F      2023-02-19 00:00:00 2023-02-19 00:00:00
## 10 1000071711…    15 否           M      2023-02-20 00:00:00 2023-02-20 00:00:00
## # ℹ 87 more rows
## # ℹ 13 more variables: 研判日 <dttm>, 縣市 <chr>, 鄉鎮市區 <chr>, 職業 <chr>,
## #   有無慢性疾病病史及相關危險因子 <chr>, 是否使用ECMO <chr>,
## #   `首次使>用ECMO日` <lgl>, 是否插管 <chr>, 首次插管日 <lgl>,
## #   首次入住加護病房日 <chr>, 快篩 <chr>, PCR <chr>, CT值 <lgl>

替補缺失值

# 創建一個包含缺失值的向量
data <- c(10, NA, 25, 30, NA)

# 將缺失值替換為0
data_no_na <- replace(data, is.na(data), 0)
print(data_no_na) # 輸出: 10  0 25 30  0
## [1] 10  0 25 30  0
exercise_sample$有無慢性疾病病史及相關危險因子 <- replace(
  exercise_sample$有無慢性疾病病史及相關危險因子 ,
  is.na(exercise_sample$有無慢性疾病病史及相關危險因子),
  '無'
)

colSums(is.na(exercise_sample))
##                      report_id                            age 
##                              0                              0 
##                   是否境外移入                         GENDER 
##                              0                              0 
##                         通報日                         發病日 
##                              0                              0 
##                         研判日                           縣市 
##                              0                              0 
##                       鄉鎮市區                           職業 
##                              0                             91 
## 有無慢性疾病病史及相關危險因子                   是否使用ECMO 
##                              0                              0 
##                首次使>用ECMO日                       是否插管 
##                            100                              0 
##                     首次插管日             首次入住加護病房日 
##                            100                              0 
##                           快篩                            PCR 
##                              0                              0 
##                           CT值 
##                            100
exercise_sample$有無慢性疾病病史及相關危險因子 <- ifelse(
  is.na(exercise_sample$有無慢性疾病病史及相關危險因子), "無", exercise_sample$有無慢性疾病病史及相關危險因子)

練習題

假設有一份COVID-19資料集,其中記錄了許多患者的基本資料,。有時候資料集中可能會包含缺失值(NA),即某些資料未填寫或不完整。現在,我們希望你寫一個程式來計算該資料集中的缺失值比例?

sort(colSums(is.na(exercise_sample)) / nrow(exercise_sample), decreasing = TRUE)
##                首次使>用ECMO日                     首次插管日 
##                           1.00                           1.00 
##                           CT值                           職業 
##                           1.00                           0.91 
##                      report_id                            age 
##                           0.00                           0.00 
##                   是否境外移入                         GENDER 
##                           0.00                           0.00 
##                         通報日                         發病日 
##                           0.00                           0.00 
##                         研判日                           縣市 
##                           0.00                           0.00 
##                       鄉鎮市區 有無慢性疾病病史及相關危險因子 
##                           0.00                           0.00 
##                   是否使用ECMO                       是否插管 
##                           0.00                           0.00 
##             首次入住加護病房日                           快篩 
##                           0.00                           0.00 
##                            PCR 
##                           0.00
#sort(colSums(is.na(exercise)) / nrow(exercise), decreasing = TRUE)

資料轉型

head(exercise_sample)
## # A tibble: 6 × 19
##   report_id      age 是否境外移入 GENDER 通報日              發病日             
##   <chr>        <dbl> <fct>        <chr>  <dttm>              <dttm>             
## 1 10000590510…    55 是           F      2023-02-18 00:00:00 2023-02-18 00:00:00
## 2 10000018414…    10 否           F      2023-02-18 00:00:00 2023-02-18 00:00:00
## 3 10000050846…    35 否           F      2023-02-18 00:00:00 2023-02-18 00:00:00
## 4 10000663290…    45 否           F      2023-02-18 00:00:00 2023-02-18 00:00:00
## 5 10000784503…    35 否           M      2023-02-18 00:00:00 2023-02-18 00:00:00
## 6 10000396145…    35 否           M      2023-02-18 00:00:00 2023-02-18 00:00:00
## # ℹ 13 more variables: 研判日 <dttm>, 縣市 <chr>, 鄉鎮市區 <chr>, 職業 <chr>,
## #   有無慢性疾病病史及相關危險因子 <chr>, 是否使用ECMO <chr>,
## #   `首次使>用ECMO日` <lgl>, 是否插管 <chr>, 首次插管日 <lgl>,
## #   首次入住加護病房日 <chr>, 快篩 <chr>, PCR <chr>, CT值 <lgl>
exercise_sample$GENDER <- as.factor(exercise_sample$GENDER)
exercise_sample$age = as.integer(exercise_sample$age)

日期

Sys.Date()
## [1] "2023-08-09"
dt <- as.Date("2023-08-08")
class(dt)
## [1] "Date"
format(dt, '%Y 年 %m 月 %d 日')
## [1] "2023 年 08 月 08 日"
datetime_str <- "2023-08-08 12:30:45"
class(datetime_str)
## [1] "character"
#as.POSIXct(datetime_str, format)

#?as.POSIXct

# 給定的字串
date_str <- "2023-08-08 12:30:45"

# 轉換成 POSIXct 格式
date_posixct <- as.POSIXct(date_str, format="%Y-%m-%d %H:%M:%S", tz = 'GMT')

# 打印結果
print(date_posixct)
## [1] "2023-08-08 12:30:45 GMT"
library(lubridate)
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union
date_str <- '2023/08/08'
ymd(date_str)
## [1] "2023-08-08"
date_str <- '2023-08-08'
ymd(date_str)
## [1] "2023-08-08"
exercise_sample$通報日 <- as.POSIXct(exercise_sample$通報日)
exercise_sample$發病日 <- as.POSIXct(exercise_sample$發病日)

exercise_sample$研判日 <- as.POSIXct(exercise_sample$研判日)
(exercise_sample$研判日 - exercise_sample$發病日) / 60
## Time differences in mins
##   [1]   2.5877778   2.5866667   2.5825000   2.5838889   4.8408333  16.5980556
##   [7]  18.6419444  14.3213889  22.2011111   0.1547222   2.6036111   2.6022222
##  [13]   2.6013889 152.6227778  14.1877778  14.1883333  16.2436111  16.5052778
##  [19]  14.3433333  16.1455556   2.5997222   4.9586111  14.3533333  16.4508333
##  [25]  17.2397222  17.5075000  20.8808333  20.4113889  20.8816667   0.2416667
##  [31]  14.2016667  14.4227778  14.4438889  14.4430556  14.4430556  14.4430556
##  [37]  16.1863889  16.1877778  22.3672222  22.3683333  22.3675000  14.3094444
##  [43]  14.3094444  14.3091667  16.1922222  16.1913889  16.1911111   0.3725000
##  [49]   0.3730556   0.3725000   2.6813889  14.1711111  16.2016667  16.2005556
##  [55]  16.1880556  16.2011111   0.3222222  14.1838889  14.1833333  16.3538889
##  [61]  16.1894444  16.3313889  16.3541667  18.1647222  22.1744444  14.3241667
##  [67]  14.3236111   0.2994444  14.1580556  14.1577778  16.1275000  16.1258333
##  [73]  20.3747222  22.4400000  22.4397222  22.4413889  22.4413889  22.4416667
##  [79]  14.2561111   0.1700000  20.0033333  16.2547222  18.1691667  16.2538889
##  [85]  16.2575000  22.3341667  22.3333333  18.1702778  18.1705556  16.1711111
##  [91]  22.2036111  16.1575000  16.1708333  16.1558333  16.0866667  22.1402778
##  [97]  22.1400000  12.1088889 129.7655556   9.8530556