지난 번 R 문자열(string) 처리 기초 따라잡기에 이어 파일을 읽고 데이터프레임을 만드는 데 필요한 사전 지식을 쌓는 시간을 가지겠습니다.
먼저, 데이터를 읽고 분석할 때 반드시 필요한 결측값 유무 확인입니다. 파이썬의 isnull() 함수와 똑같은 역할을 합니다.
x = c(1, 0, 3, 5, NA)
is.na(x)
sum(is.na(x))
만약 결측값이 포함되어 있다면 통계적 수치를 구하려고 할 때 "기본적으로" 오류가 납니다. 결측값을 미처 제거하지 못했다면 na.rm=True 파라미터를 추가해주면 되겠습니다.
x <- c(1, 0, 3, 5, NA)
mean(x); max(x)
mean(x, na.rm=TRUE); max(x, na.rm=TRUE)
특정 파일을 읽지 않고 자체적으로 데이터프레임을 만들 수 있는데요. 가장 간단하게 사용할 수 있는 함수가 matrix() 입니다. byrow=True 파라미터 유무에 따라 열단위, 행단위로 구분하여 값이 채워집니다.
x <- matrix(1:12, nrow=3)
y <- matrix(1:12, nrow=3, byrow=TRUE)
x
y
matrix() 이외의 또 다른 방법은 cbind(), rbind() 함수를 이용하는 것입니다. cbind() 는 column 즉 열단위로 묶어주는 것이고, rbind() 는 row 즉 행단위로 묶어줍니다.
x1 <- 1:3
x2 <- 4:6
A <- cbind(x1, x2)
B <- rbind(x1, x2)
cbind(A, x3=7:9)
rbind(A, 7:8)
x1 <- 1:4
x2 <- 5:6
x3 <- 7
cbind(x1, x2, x3) # 벡터들의 길이가 다를 경우 순환법칙 적용
dim() 함수로도 데이터프레임을 만들 수 있습니다. dim() 함수는 말그대로 dimension 즉 차원을 정해주는 것으로 행과 열 크기를 지정해주면 되겠습니다.
x <- 1:12
dim(x) <- c(3, 4)
rownames(x) <- c("one", "two", "three")
colnames(x) <- c("a", "b", "c", "d")
x
마지막으로 array() 를 통해서도 데이터프레임을 생성할 수 있습니다. array() 함수에는 파라미터로 행, 열, 행렬 개수를 설정해줘야 하고, 아래에 보시면 아시겠지만 순서대로 행, 열, 행렬 개수를 작성하면 됩니다.
y <- array(1:24, c(4, 3, 2))
y
데이터프레임을 생성했다면 처리하는 방법도 살펴봐야겠죠. 열 기준 평균을 구할 수도 있고, 행 기준 합을 구할 수도 있으며, 대각행렬만 따로 추출할 수도 있습니다.
A <- matrix(1:4, nrow=2, byrow=TRUE)
B <- matrix(5:8, nrow=2, byrow=TRUE)
colMeans(A)
A %*% B # 행렬곱 계산
rowSums(A)
diag(A) # 대각행렬
위에서 행렬곱 개념이 익숙하지 않다면 아래 A,B 행렬값을 참고해주세요. 행렬곱이란 행렬 원소끼리 서로 곱해주는 것인데요, 쉽게 말해 A %*% B의 (1, 1)값 19는 1x5 + 2x7 에 의해 나온 것입니다. 마찬가지로 (1, 2)값 22는 1x6 + 2x8 에 의해 나온 것이겠죠.
행렬곱을 할 때 주의할 점은 각 행렬의 크기입니다. 예를 들어, 행렬 A의 크기가 mxn, B의 크기가 nxp 일 때 A %*% B 행렬의 크기는 mxp 입니다. 만약 A의 크기가 nxm, B의 크기가 nxp라면 행렬곱이 불가능합니다. 즉 앞 행렬의 열 크기가 뒤 행렬의 행 크기와 동일해야 행렬곱이 가능해집니다.
데이터프레임의 본격적 처리 방법은 다음 데이터프레임 기초 따라잡기 2탄에서 소개하겠습니다.
'문돌이 존버 > R 기초 스터디' 카테고리의 다른 글
R ggplot2 geom 객체 기초 따라잡기 (0) | 2020.11.12 |
---|---|
R ggplot2 Facet(ing) 함수 기초 따라잡기 (0) | 2020.11.11 |
R ggplot2 활용법 기초 따라잡기 (0) | 2020.11.10 |
R 문자열(string) 처리 기초 따라잡기 (0) | 2020.11.07 |
R 데이터 생성(벡터) 방법 기초 따라잡기 (0) | 2020.11.05 |