일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 통계
- 한서지리지
- 독사방여기요
- spss
- 유주
- 히스토그램
- 패수
- 선형회귀분석
- 낙랑군
- t test
- ANOVA
- repeated measures ANOVA
- Histogram
- 한서
- linear regression
- 우분투
- categorical variable
- 창평
- 기자
- 고구려
- 태그를 입력해 주세요.
- 통계학
- post hoc test
- 기자조선
- 단군
- 후한서
- 풍백
- 지리지
- 신라
- R
- Today
- Total
獨斷論
통계 R 사용설명서 12 - 큰 데이터에서 행과 열을 선택하여 새로운 데이터 생성 본문
큰 데이터에서 특정 변수(열)나 특정 관측치(행, observation, subject)만을 선택하여 새로운 데이터를 생성하는 방법에 대해서 알아보자.
변수 선택
행렬이나 데이터프레임에 저장된 데이터 중에 몇개의 변수만 선택하는 방법은 다음과 같다.
일단 아래와 같이 생긴 데이터가 있다고 가정하고
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
> id <- c('s1', 's2', 's3', 's4', 's5', 's6', 's7', 's8') |
여기서 q2~q5까지 선택하고자 한다면 아래와 같이 하면 된다.
1 2 3 4 5 6 7 8 9 10 11 |
> mydat_n <- mydat[ , c(3:6)] |
1째 줄에서 mydat[ , c(3:6)]은 모든 행을 선택하고 열은 3에서 6까지 선택하라는 명령어이다.
하지만 자신이 원하는 변수(열)이 몇번째 열인이 기억하는거란 쉽지 않으므로 변수명을 이용하여 원하는 변수만 선택할수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 |
> new_var <- c("q2", "q3", "q4", "q5") |
1째 줄에서 new_var에 자신이 원하는 변수명을 입력하였고 이 변수명을 값으로 갖는 새로운 변수 new_var를 이용하여 mydat[new_var]에서 원하는 변수만 선택하였다.
하지만 q2, q3, q4, q5와 같이 앞에 같은 알파벳 변수에 숫자만 바뀌는 형식을 입력하는게 귀찮다면 paste()를 이용해도 된다.
일때
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
> new_var2 <- paste("q", 2:5, sep="") |
paste()명령어에서 sep=""의 따옴표 사이에 공백이 없다. sep 옵션은 q와 그 뒤에 붙일 번호 사이에 무엇을 넣을지 결정해주는 것이다.
변수 제거
변수를 제거하기 위해서는 다음과 같이 %in%을 사용하면 된다. %in%은 두 변수 사이에 같은 값이 있는지 없는지 조사해서 같은 값이 있으면 TRUE, 없으면 FALSE를 돌려주는 연산자이다.
1 2 3 4 5 6 7 8 9 10 11 12 |
> excld_var <- names(mydat) %in% c("q1", "q4") |
1째 줄에서 %in%을 이용하여 무엇을 제외할지 선택하여 TRUE와 FALSE를 excld_var에 넣었다.
1 2 |
> excld_var |
2째 줄에서 mydat로부터 excld_var에서 제거하고자 하는 변수를 제거하였다. !excld_var이라고 하면 TRUE와 FALSE값이 바뀌는 것을 이용하였다.
1 2 |
> !excld_var |
!excld_var을 mydat[ ]의 인자로 사용하여 mydat[!excld_var]이라고 하면 !excld_var이 TRUE인것만 선택하게 되는 것이다.
이것이 좀 복잡하다면 무식하게 몇번째 열인지 일일이 세면 된다.
q1과 q4는 2번째 5번째 열에 해당되므로
1 2 3 4 5 6 7 8 9 10 11 |
> mydat_n4 <- mydat[c(-2, -5)] |
라고 하면 되는데 역시 데이터가 클 경우 이런건 거의 불가능하다.
만약 원래의 데이터를 저장하지 않고 변수를 지운 데이터만 가지고 있고 싶다면 다음과 같이 하면 된다. 내가 보기에는 이게 더 실질적이고 간단하다.
1 2 3 4 5 6 7 8 9 10 11 12 |
> mydat$q1 <- NULL |
관측치(열, observation, subject) 선택
observation에 해당되는 우리말이 관측치라고 하는지 모르겠어서 제목을 이렇게 너저분하게 달아보았다.
여기서는 데이터의 행 전체를 어떻게 선택하는지 알아본다.
우선 다음과 같은 데이터가 있다고 가정하자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
> id <- c(1, 2, 3, 4, 5) |
이 중에서 나이가 40이상인 여자만 선택하여 분석하고자 한다면
그냥 눈으로 보고 3번째와 4번째 행에 해당되므로
1 2 3 4 5 |
> mydat_n1 <- mydat[c(3,4), ] |
라고 할수도 있으나 너무 무식하다. 데이터가 큰 경우에는 사용불가!
1 2 3 4 5 |
> mydat_n2 <- mydat[which(mydat$gender == "F" & mydat$age >= 40), ] |
라고 하면 큰 데이터에서도 사용이 가능하다.
만약 which()안에 변수명이 너무 길어서 불편하다면
1 2 3 4 5 6 7 8 9 10 11 |
> attach(mydat) |
하면 된다. 마지막에 detach()를 꼭 넣는것을 잊지 말자.