Python이든 R이든 데이터 프레임 (Data Frames)은 데이터 분석 시 가장 잘 다뤄지는 형식 중 하나이다. 이번 포스팅에서는 R에서 데이터 프레임을 다루는 기본적인 코드들을 정리하였다.
기본 코드
library(dplyr)
library(tidyverse)
# Generate a data frame.
df <- data.frame(A = c(1,2,3,4), B = c(1,1,1,1))
# Add columns
df$C <- (df$A - df$B)
df[,'D'] <- (df[,'A'] + df[,'B'])
df$E <- c(2,2,2,2)
# Add a row
df[nrow(df) + 1,] = c(5,1,4,6,2)
# Indexing
rownames(df)
colnames(df)
df[,1:2] # same with df[,c('A','B')], df %>% select('A','B')
# Select
df[(df['A']==5)]
subset(df, A>2 & D<6) # simiral with df %>% filter(A>2 & D<6)
subset(df, A %in% c(1,2,3))
df[df['A']==5 & df['B']==1,'Selected']=TRUE
df = df %>% select(-'Selected')
# Filter
df %>% filter(column %in% 'value1')
# Pull
df %>% pull(column1) # return a list of values from 'column1'
# Ordering
df %>% arrange(-A) # same with dplyr::arrange(df, -A)
# Merge
rownames(df) = c(1,2,3,4,5)
df2 <- data.frame(A = c(1,2,3,4))
rownames(df2) = c(3,4,5,6)
merge(df, df2, by=0, all = TRUE, suffixes=c('.x','.y'))
df = merge(df, df2, by=0, all = TRUE, suffixes=c('.x','.y'))
# Fill NA
df[,'A.y'][is.na(df[,'A.y'])] <- 0
df['6',][is.na(df['6',])] <- df['1',][is.na(df['6',])]
# Save and load
write_csv(df, 'df.csv')
df <- read.csv("df.csv")
예제 모음
# Test_로 시작하는 모든 column값에 대하여
# Group 컬럼 값이 Case인 row에 대해서는 모두 500으로 바꿔주고, 아니면 기존 값으로 둠.
dplyr::mutate(across(starts_with("Test_"), ~ if_else(Group=="Case", 500, .)))
팁
- tidyverse는 code를 다른 방식으로 표현시켜 주는 페키지이다. 예를 들어 dplyr::arrange(df, -A)을 df %>% arrange(-A)처럼 쓸 수 있게 해준다. 어느 것이 더 편할지는 선택하면 되는데, 개인적으로는 tidyverse식 표현 방법이 마음에 들었다.
- dplyr의 함수를 호출할 때 페키지를 임포트하고, 함수만 호출하는 것이 아니라, "dplyr::함수"로 호출하는 것이 안전하다. 예를 들어, library(dplyr) 후 arrange(df, -A)보다 dplyr::arrange(df, -A)로 쓰는 것이 더 낫다. 이는 dplyr 내 arrange, select 등의 함수가 다른 페키지에서 정의되어 있을 때 그 페키지를 임포트하면 꼬일 수 있기 때문이다 (나는 dplyr 페키지의 select를 쓰려고 했는데, 다른 페키지의 select 함수가 불러와지는 등).
- R에서 dataframe을 다룰 때 dplyr 페키지를 활용하면 아주 유용하다. dplyr의 간단한 사용방법은 아래 URL에서 확인할 수 있다.
https://dplyr.tidyverse.org/articles/dplyr.html
728x90
반응형
'Computer Science > R' 카테고리의 다른 글
[R package] ggplot 오브젝트를 쉽게 합쳐주는 patchwork (0) | 2023.10.09 |
---|---|
[R] 색깔 팔레트를 통한 Figure 색 지정 (RColorBrewer 등) (0) | 2022.10.01 |