일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- EdgeR
- cellranger
- python matplotlib
- ngs
- 싱글셀 분석
- CSS
- js
- github
- PYTHON
- HTML
- single cell
- CUT&RUN
- CUTandRUN
- Batch effect
- DataFrame
- single cell analysis
- scRNAseq
- pandas
- javascript
- 비타민 C
- scRNAseq analysis
- drug development
- julia
- single cell rnaseq
- Git
- ChIPseq
- MACS2
- Bioinformatics
- matplotlib
- drug muggers
- Today
- Total
바이오 대표
[R - 기본기] "dplyr" 을 이용한 Data transformation 본문
요약:
- filter( )
- arrange( ) - order 바꿔줌
- select( ) - pick variables (columns) by names
- mutate( ) - create new variables, existing variables 이용
- summarize( )
** group_by( ) 로 중복 사용 가능
예시 데이터
library(nycflights13)
library(tidyverse)
flights
#> # A tibble: 336,776 x 19
#> year month day dep_time sched_dep_time dep_delay arr_time sched_arr_time
#> <int> <int> <int> <int> <int> <dbl> <int> <int>
#> 1 2013 1 1 517 515 2 830 819
#> 2 2013 1 1 533 529 4 850 830
#> 3 2013 1 1 542 540 2 923 850
#> 4 2013 1 1 544 545 -1 1004 1022
#> 5 2013 1 1 554 600 -6 812 837
#> 6 2013 1 1 554 558 -4 740 728
#> # … with 336,770 more rows, and 11 more variables: arr_delay <dbl>,
#> # carrier <chr>, flight <int>, tailnum <chr>, origin <chr>, dest <chr>,
#> # air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>
Terms
variables = columns
observations = rows
values = each 값
5.4 Select columns with select( )
큰 데이터 셋을 column names 를 이용하여 빠르게 subset 하고 싶을 때 사용 가능하다.
Select( ) 기본
select(data, name_1, name_2) # name 은 column name 을 뜻한다.
# Select columns by name
select(flights, year, month, day)
#> # A tibble: 336,776 x 3
#> year month day
#> <int> <int> <int>
#> 1 2013 1 1
#> 2 2013 1 1
#> 3 2013 1 1
#> 4 2013 1 1
#> 5 2013 1 1
#> 6 2013 1 1
#> # … with 336,770 more rows
# year부터 day까지의 모든 columns select
select(flights, year:day)
# 특정 부분 제외하고 select
select(flights, -(year:day))
** errors **
- unable to find an inherited method for function ‘select’ for signature ‘"tbl_df"’
- → select( ) 대신 dplyr:: select( )로 직접 불러와준다.
rename( ), everything( )
rename(data, original_name = “new_name”): column 이름 변경 가능하다.
select(data, name_1, name_2, everything( )): 원하는 columns을 앞쪽에 위치 시키고 나머지 보이게 가능하다.
select(flights, time_hour, air_time, everything())
#> # A tibble: 336,776 x 19
#> time_hour air_time year month day dep_time sched_dep_time
#> <dttm> <dbl> <int> <int> <int> <int> <int>
#> 1 2013-01-01 05:00:00 227 2013 1 1 517 515
#> 2 2013-01-01 05:00:00 227 2013 1 1 533 529
#> 3 2013-01-01 05:00:00 160 2013 1 1 542 540
#> 4 2013-01-01 05:00:00 183 2013 1 1 544 545
#> 5 2013-01-01 06:00:00 116 2013 1 1 554 600
#> 6 2013-01-01 05:00:00 150 2013 1 1 554 558
#> # … with 336,770 more rows, and 12 more variables: dep_delay <dbl>,
#> # arr_time <int>, sched_arr_time <int>, arr_delay <dbl>, carrier <chr>,
#> # flight <int>, tailnum <chr>, origin <chr>, dest <chr>, distance <dbl>,
#> # hour <dbl>, minute <dbl>
Columns을 뽑아 낼 때, 적용 가능한 functions:
starts_with(" "): “ ”로 시작하는 names
ends_with(" "): “ ” 로 끝나는 names
contains(" "): “ “ 포함
any_of( ): character들을 만들어서 사용가능 ex) vars <- c("year", "month”), select(d, any_of(vars)
matches(" "): regular expression을 이용한다. #대/소문자 상관 없음 ex) “(.)\\1”
num_range("x", 1:3): matches x1, x2 and x3.
** regular expression https://r4ds.had.co.nz/strings.html#matching-patterns-with-regular-expressions
# contains 를 사용한 예시
select(flights, contains("dep"))
# # A tibble: 336,776 × 3
# dep_time sched_dep_time dep_delay
# <int> <int> <dbl>
# 1 517 515 2
# 2 533 529 4
# 3 542 540 2
# 4 544 545 -1
# 5 554 600 -6
# 6 554 558 -4
# 7 555 600 -5
# 8 557 600 -3
# 9 557 600 -3
# 10 558 600 -2
# # … with 336,766 more rows
# # ℹ Use `print(n = ...)` to see more rows
짬뽕 역시 가능하다
flights_sml <- dplyr::select(flights,
year:day,
ends_with("delay"),
distance,
air_time
)
# # A tibble: 336,776 × 7
# year month day dep_delay arr_delay distance air_time
# <int> <int> <int> <dbl> <dbl> <dbl> <dbl>
# 1 2013 1 1 2 11 1400 227
# 2 2013 1 1 4 20 1416 227
# 3 2013 1 1 2 33 1089 160
# 4 2013 1 1 -1 -18 1576 183
# 5 2013 1 1 -6 -25 762 116
# 6 2013 1 1 -4 12 719 150
# 7 2013 1 1 -5 19 1065 158
# 8 2013 1 1 -3 -14 229 53
# 9 2013 1 1 -3 -8 944 140
# 10 2013 1 1 -2 8 733 138
# # … with 336,766 more rows
# # ℹ Use `print(n = ...)` to see more rows
5.5 Add new variable with mutate( )
Dateset의 끝에 새로운 column 추가를 위해 사용된다.
mutate( ) 기본
mutate(data, new_name1 = function1, new_name2 = function2)
transmute( data, new_name1 = , new_name2 = ) : 새로 만든 variables(columns) 만 keep 가능하다.
mutate(flights_sml,
gain = dep_delay - arr_delay,
speed = distance / air_time * 60
)
#> # A tibble: 336,776 x 9
#> year month day dep_delay arr_delay distance air_time gain speed
#> <int> <int> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 2013 1 1 2 11 1400 227 -9 370.
#> 2 2013 1 1 4 20 1416 227 -16 374.
#> 3 2013 1 1 2 33 1089 160 -31 408.
#> 4 2013 1 1 -1 -18 1576 183 17 517.
#> 5 2013 1 1 -6 -25 762 116 19 394.
#> 6 2013 1 1 -4 12 719 150 -16 288.
#> # … with 336,770 more rows
# mutate() 안에서 variables(columns)을 만들었으면 그 또한 사용 가능하다.
mutate(flights_sml,
gain = dep_delay - arr_delay,
hours = air_time / 60,
gain_per_hour = gain / hours
)
Functions or aggregates
산술 연산 | +, -, *, /, ^, sum( ), mean( ), … |
모듈러(Modular) 연산 | %/%(integer division, %%(remainder) |
Logs | log( ), log2( ), log10( ) |
Offsets | lead( ), lag( ) # lead( ) 는 뒤에서분터, lag( ) 는 앞에서 부터 데이터를 NA 로 전환 시켜 준다. |
Cumulative, rolling 합계(aggregates ) | cumsum( ), cumprod( ), cummin( ), cummax( ) |
Logical comparisons | <, ≤, >, ≥, ≠, == |
Ranking | min_rank(-desc( ) #내림차순), dense_rank( ), percent)rank( ), cume_dist( ), ntile( ) |
y <-c(1, 2, 2, NA, 3, 4)
min_rank(y)
#> [1] 1 2 2 NA 4 5
min_rank(desc(y))
#> [1] 5 3 3 NA 2 1 # desc 가 붙으면 -를 붙여줌
row_number(y)
#> [1] 1 2 3 NA 4 5
dense_rank(y)
#> [1] 1 2 2 NA 3 4
percent_rank(y)
#> [1] 0.00 0.25 0.25 NA 0.75 1.00
cume_dist(y)
#> [1] 0.2 0.6 0.6 NA 0.8 1.0
'R' 카테고리의 다른 글
[ R 시각화 ] R 언어로 그리는 이쁜 히트맵 (Heatmap) - complexHeatmap (3) | 2023.08.04 |
---|---|
[R function 익히기 1] grepl(패턴, x) : 문자열 패턴 매칭 함수 (2) | 2023.03.18 |