반응형

[R] 변수 계산 (산술 연산)

 주어진 데이터의 값을 바꾸어 사용해야 할 때가 있다. 이번 포스팅에서는 다음의 연산들을 소개할 것이다.

 

산술 연산

1) 더하기

2) 빼기

3) 곱하기

4) 나누기

5) 제곱 (승)

6) 로그 (log)

7) 지수

 

*실습용 데이터는 아래 링크를 클릭하면 다운로드할 수 있습니다.

2022.08.04 - [공지사항 및 소개] - 분석용 데이터 (update 22.11.21)

 

분석용 데이터 (update 22.11.21)

2022년 11월 21일 버전입니다. 변수는 계속하여 추가될 예정입니다. 다음 카테고리에 있는 글에서 이용된 데이터입니다. - 기술 통계 - 범주형 자료 분석 - 모평균 검정 - 반복 측정 자료 분석 - 통계

medistat.tistory.com

 

코드를 보여드리기에 앞서 워킹 디렉토리부터 지정하겠다.

워킹 디렉토리에 관한 설명은 다음 링크된 포스트에서 볼 수 있다.

2022.08.05 - [통계 프로그램 사용 방법/R] - [R] 작업 디렉토리 (Working Directory) 지정 - getwd(), setwd()

setwd("C:/Users/user/Documents/Tistory_blog")

 

데이터를 불러와 df에 객체로 저장하겠다.

데이터 불러오는 방법은 다음 링크에서 볼 수 있다.

2022.08.05 - [통계 프로그램 사용 방법/R] - [R] 데이터 불러오기 : EXCEL - read_excel(), read.xlsx()

2022.08.10 - [통계 프로그램 사용 방법/R] - [R] 데이터 저장하기 : CSV 파일 - write.csv(), write_csv()

2022.08.10 - [통계 프로그램 사용 방법/R] - [R] 데이터 불러오기 : SAS file (.sas7bdat) - read.sas7bdat(), read_sas()

install.packages("readr")
library("readr")
df<-read_csv("Data.csv")

 

코드

#1) 더하기
df$LIVER_SUM=df$AST+df$ALT

#2) 빼기
df$ALT_DIF=df$ALT-df$ALT_POSTMED

#3) 곱하기
df$MALE_ALC=df$SEX*df$ALCOHOL

#4) 나누기
df$LIVER_RATIO=df$AST/df$ALT

#5) 거듭제곱 (승)
df$SBP_SQ=df$SBP**2

#6) 로그 (log)
df$LOG_ALT=log(df$ALT)
df$LOG10_ALT=log(df$ALT, base=10)
df$LOG7_ALT=log(df$ALT)/log(7)

#7) 지수
df$EXP_ALT=exp(df$ALT)
df$EXP10_ALT=exp(df$ALT*log(10))

#1) 더하기
df$LIVER_SUM=df$AST+df$ALT: df 데이터의 AST와 ALT를 합쳐 그 값을 df에 LIVER_SUM이라는 변수를 새로 만들고 거기에 저장해라.

#2) 빼기
df$ALT_DIF=df$ALT-df$ALT_POSTMED : df 데이터의 ALT에서 ALT_POSTMED를 빼서 그 값을 df 데이터의 ALT_DIF이라는 변수를 새로 만들고 거기에 저장해라.

#3) 곱하기
df$MALE_ALC=df$SEX*df$ALCOHOL : SEX와 ALCOHOL을 곱해 MALE_ALC라는 변수에 저장해라.

#4) 나누기
df$LIVER_RATIO=df$AST/df$ALT : AST를 ALT로 나누어 그 값을 LIVER_RAIO라는 변수에 저장해라

#5) 거듭제곱 (승)
df$SBP_SQ=df$SBP**2 : SPB를 제곱하여 SBP_SQ에 저장해라. 만약 세제곱을 원한다면 "SBP**3"을 사용하면 된다.

#6) 로그 (log)
df$LOG_ALT=log(df$ALT) : ALT에 로그를 씌워 LOG_ALT에 저장해라. 이때 로그의 밑은 $e$다.
df$LOG10_ALT=log(df$ALT, base=10) : ALT에 로그를 씌워 LOG_ALT에 저장해라. 이때 로그의 밑은 이다.
df$LOG7_ALT=log(df$ALT)/log(7) : ALT에 로그를 씌워 LOG_ALT에 저장해라. 이때 로그의 밑은 이다. 원하는 숫자를 밑으로 하고 싶으면 7이 아닌 원하는 숫자를 적으면 된다.

#7) 지수
df$EXP_ALT=exp(df$ALT) : $e$의 ALT승을 EXP_ALT에 저장해라.
df$EXP10_ALT=exp(df$ALT*log(10)) : 10의 ALT승($10^{ALT}$)을 EXP10_ALT에 저장해라. 만약 10이 아닌 5의 ALT승를원하면 "log(5)"를 사용하면 된다.

 

연산 시 결측치는 어떻게 처리되는가?

 연산시 결측치는 어떻게 처리될까? AST가 결측치인 사람의 ALT값은 존재했다면, AST와 ALT를 더한 LIVER_SUM변수의 값은 어떻게 될까? 다음과 같이 결측치의 개수를 확인해보자. (결측치 확인 방법은 다음 링크를 확인하길 바란다. 2022.11.25 - [통계 프로그램 사용 방법/R] - [R] 결측치 확인 및 개수 확인 - is.na())

 

코드

sum(is.na(df$LIVER_SUM))

결과

8

 

즉, 산술계산을 하여도 결측치로 반환한다. 덧셈뿐 아니라 이번 포스팅에 있던 모든 산술 연산은 "결측치는 결측치로"반환한다.

 

[R] 변수 계산 (산술 연산) 정복 완료!

작성일: 2022.11.25.

최종 수정일: 2022.11.25.

이용 프로그램: R 4.2.2

RStudio v2022.07.2

RStudio 2022.07.2+576 "Spotted Wakerobin" Release

운영체제: Windows 10, Mac OS 12.6.1

반응형
반응형

[R] 결측치 확인 및 개수 확인 - is.na()

 데이터는 완벽할 수 없다. 완벽하면 좋겠지만 여러 이유로 수집되지 못하는 결측치가 존재하기 마련이다. 이 결측치를 확인하는 것은 매우 중요하다. 이번 포스팅에서는 결측치가 어디에 있는지 확인하고, 그 개수를 세보는 내용을 다루겠다.

 

*실습용 데이터는 아래 링크를 클릭하면 다운로드할 수 있습니다.

2022.08.04 - [공지사항 및 소개] - 분석용 데이터 (update 22.11.21)

 

분석용 데이터 (update 22.11.21)

2022년 11월 21일 버전입니다. 변수는 계속하여 추가될 예정입니다. 다음 카테고리에 있는 글에서 이용된 데이터입니다. - 기술 통계 - 범주형 자료 분석 - 모평균 검정 - 반복 측정 자료 분석 - 통계

medistat.tistory.com

 

코드를 보여드리기에 앞서 워킹 디렉토리부터 지정하겠다.

워킹 디렉토리에 관한 설명은 다음 링크된 포스트에서 볼 수 있다.

2022.08.05 - [통계 프로그램 사용 방법/R] - [R] 작업 디렉토리 (Working Directory) 지정 - getwd(), setwd()

setwd("C:/Users/user/Documents/Tistory_blog")

 

데이터를 불러와 df에 객체로 저장하겠다.

데이터 불러오는 방법은 다음 링크에서 볼 수 있다.

2022.08.05 - [통계 프로그램 사용 방법/R] - [R] 데이터 불러오기 : EXCEL - read_excel(), read.xlsx()

2022.08.10 - [통계 프로그램 사용 방법/R] - [R] 데이터 저장하기 : CSV 파일 - write.csv(), write_csv()

2022.08.10 - [통계 프로그램 사용 방법/R] - [R] 데이터 불러오기 : SAS file (.sas7bdat) - read.sas7bdat(), read_sas()

install.packages("readr")
library("readr")
df<-read_csv("Data.csv")

 

코드 - 결측치 위치 확인

is.na(df)

is.na(df) : 결측치는 "TRUE"를, 결측치가 아니면 "FALSE"를 반환하는 함수를 데이터 df에 적용하라

결과

        IDNO   SEX  SMOK ALCOHOL RESID  TWIN    RH   HTN   SBP   ALT   AST ALT_POSTMED FVC_pPRED TRANSPORT
   [1,] FALSE FALSE FALSE   FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE       FALSE     FALSE     FALSE
   [2,] FALSE FALSE FALSE   FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE       FALSE     FALSE     FALSE
   [3,] FALSE FALSE FALSE   FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE       FALSE     FALSE     FALSE
   [4,] FALSE FALSE FALSE   FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE       FALSE     FALSE     FALSE
   [5,] FALSE FALSE FALSE   FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE       FALSE     FALSE     FALSE
   [6,] FALSE FALSE FALSE   FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE       FALSE     FALSE     FALSE
   [7,] FALSE FALSE FALSE   FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE       FALSE     FALSE     FALSE
   [8,] FALSE FALSE FALSE   FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE       FALSE     FALSE     FALSE
   [9,] FALSE FALSE FALSE   FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE       FALSE     FALSE     FALSE
  [10,] FALSE FALSE FALSE   FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE       FALSE     FALSE     FALSE

결과창 중 일부만 가져왔다. 1000명에 대한 데이터이므로 행의 개수는 1000개인데 그 중 10개만 가져온 것이다.

결측치는 TRUE로 반환했을 것인데, 여기까지는 결측치가 보이지 않는다.

 

 결측치가 몇 개인지 알고 싶은데, 이 1000개를 들여다보는 것은 말은 안 된다. 이때 다음 코드를 쓰면 개수를 구할 수 있다.

코드 - 결측치 개수 확인

sum(is.na(df))

sum(is.na(df)) : is.na(df)에서 TRUE인 것의 개수를 계산하라.

결과

8

8개가 결측치임을 알 수 있다.

 

 

 

그럼 만약에 변수별로 결측치의 개수를 확인하고 싶다면 어떻게 해야할까? 만약 AST의 결측치 개수를 보고 싶다면 다음 코드를 시행하면 된다.

코드

sum(is.na(df$AST))

결과

8

 

 

[R] 결측치 확인 및 개수 확인 정복 완료!

작성일: 2022.11.25.

최종 수정일: 2022.11.25.

이용 프로그램: R 4.2.2

RStudio v2022.07.2

RStudio 2022.07.2+576 "Spotted Wakerobin" Release

운영체제: Windows 10, Mac OS 12.6.1

반응형
반응형

[R] 변수의 유형 (타입, type) 확인 및 변경 - as.factor(), as.numeric(), str()

 

변수는 보통 다음 네 가지의 종류로 나누곤 한다.

 

1) 명목 척도: 범주형, 순서 없음

 예시) 성별 - "남성", "여성"

2) 순서 척도: 범주형, 순서 있음

 예시) 암의 병기 - "1기", "2기", "3기", "4기"

3) 등간 척도: 연속형, 곱셈 불가

 예시) IQ 점수 - IQ가 150인 사람보다 100인 사람은 50점이 더 높다. 100점인 사람이 50점인 사람도 똑같이 50점이 더 높다. 하지만 100점인 사람이 50점보다 두 배 더 똑똑하다고 할 수는 없다.

4) 비율 척도: 연속형, 곱셈 가능

 예시) 나이 - "1세", "55세",...

 

그런데, 학문적으로 저렇게 나눈다고 하여도, 의학 통계를 하는 사람에게 저렇게 세분하는 것이 그렇게까지 중요한 것은 아니다. 단지 우리에게는 범주형 (비연속형, 이산형) 변수와 연속형 변수가 있다는 사실만이 중요하다. 이번 포스팅에서는 변수의 형태를 확인하고, 원하는 경우 다른 유형으로 변경하는 방법에 대해 알아보겠다.

 

*실습용 데이터는 아래 링크를 클릭하면 다운로드할 수 있습니다.

2022.08.04 - [공지사항 및 소개] - 분석용 데이터 (update 22.11.21)

 

분석용 데이터 (update 22.11.21)

2022년 11월 21일 버전입니다. 변수는 계속하여 추가될 예정입니다. 다음 카테고리에 있는 글에서 이용된 데이터입니다. - 기술 통계 - 범주형 자료 분석 - 모평균 검정 - 반복 측정 자료 분석 - 통계

medistat.tistory.com

 

코드를 보여드리기에 앞서 워킹 디렉토리부터 지정하겠다.

워킹 디렉토리에 관한 설명은 다음 링크된 포스트에서 볼 수 있다.

2022.08.05 - [통계 프로그램 사용 방법/R] - [R] 작업 디렉토리 (Working Directory) 지정 - getwd(), setwd()

setwd("C:/Users/user/Documents/Tistory_blog")

 

데이터를 불러와 df에 객체로 저장하겠다.

데이터 불러오는 방법은 다음 링크에서 볼 수 있다.

2022.08.05 - [통계 프로그램 사용 방법/R] - [R] 데이터 불러오기 : EXCEL - read_excel(), read.xlsx()

2022.08.10 - [통계 프로그램 사용 방법/R] - [R] 데이터 저장하기 : CSV 파일 - write.csv(), write_csv()

2022.08.10 - [통계 프로그램 사용 방법/R] - [R] 데이터 불러오기 : SAS file (.sas7bdat) - read.sas7bdat(), read_sas()

install.packages("readr")
library("readr")
df<-read_csv("Data.csv")

 

데이터 유형 확인하기 - str()

코드

데이터에 있는 변수들의 유형을 확인할 때에는 str()이라는 함수를 쓴다. 내장함수이므로 별도 패키지의 설치가 필요 없다.

str(df)

 

결과

spc_tbl_ [1,000 × 14] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
 $ IDNO       : num [1:1000] 1 2 3 4 5 6 7 8 9 10 ...
 $ SEX        : num [1:1000] 0 0 0 0 1 1 1 1 0 1 ...
 $ SMOK       : num [1:1000] 1 2 0 0 2 1 1 1 1 0 ...
 $ ALCOHOL    : num [1:1000] 1 1 0 0 1 1 1 1 1 0 ...
 $ RESID      : num [1:1000] 1 2 2 0 1 2 0 2 0 0 ...
 $ TWIN       : num [1:1000] 0 0 0 0 0 0 0 0 0 0 ...
 $ RH         : num [1:1000] 1 1 1 1 1 1 1 1 1 1 ...
 $ HTN        : num [1:1000] 1 1 0 1 1 0 0 0 1 0 ...
 $ SBP        : num [1:1000] 142 151 120 148 165 ...
 $ ALT        : num [1:1000] 39.1 37.4 31.4 19.7 35.6 ...
 $ AST        : num [1:1000] 45.7 37.4 33.6 23.4 27.6 ...
 $ ALT_POSTMED: num [1:1000] 38.4 28.6 34.9 32.8 32 ...
 $ FVC_pPRED  : num [1:1000] 73.4 54.7 121.5 77.6 91.6 ...
 $ TRANSPORT  : chr [1:1000] "도보" "도보" "도보" "도보" ...

하나씩 살펴보면 다음과 같다.

맨 앞에 있는 "IDNO", "SEX", "SMOK", "ALCOHOL", ... ,"TRNASPORT"는 변수의 이름이다.

"IDNO"부터 "FVC_pPRED"까지는 num이라고 적혀있다. 이는 numeric의 약자이며, 숫자형 (연속형) 변수임을 의미한다.

"TRANSPORT"는 chr이라고 적혀있다. 이는 character의 약자이며, 문자형 변수임을 의미한다.

 

그런데, 서두에 우리는 변수를 범주형, 연속형 변수로 나누기로 했다. 그런데, 숫자로 이루어진 변수는 모두 연속형 변수로 취급되고 있고, 문자가 들어간 변수는 그저 문자형 변수로 취급되고 있다. 그런데 이는 적절하지 않다. 예를 들어 성별을 나타내는 "SEX"변수는 1과 2로 이루어진 범주형 변수다. 여성을 나타내는 0이 남성을 나타내는 1보다 작다고 할 수 없는 것이다. 그저 숫자로 나타낸 것 뿐이다. 여성을 2로 나타낼 수도 있었는데, 그렇다고 하여 여성이 남성보다 크다고 할 수는 없는 것이다.

 

 코드북을 살펴보면 알 수 있지만, 다음과 같이 변수를 구분할 수 있다.

변수명 변수 종류
SEX 범주형
SMOK 범주형
ALCOHOL 범주형
RESID 범주형
TWIN 범주형
RH 범주형
HTN 범주형
SBP 연속형
ALT 연속형
AST 연속형
ALT_POST 연속형
FVC_pPRED 연속형
TRANSPORT 범주형

 

따라서, "IDNO", "SEX", "SMOK", "ALCOHOL", "RESID", "TWIN", "RH", "HTN", "TRANSPORT"는 범주형 자료로 바꿔주어야 한다. 이럴 때에는 범주형 변수로 바꾸어주는 as.factor() 함수를 사용해야 한다.

 

범주형 변수로 바꾸기 - as.factor()

코드

df$SEX<-as.factor(df$SEX)
df$SMOK<-as.factor(df$SMOK)
df$ALCOHOL<-as.factor(df$ALCOHOL)
df$RESID<-as.factor(df$RESID)
df$TWIN<-as.factor(df$TWIN)
df$RH<-as.factor(df$RH)
df$HTN<-as.factor(df$HTN)
df$TRANSPORT<-as.factor(df$TRANSPORT)

df$SEX<-as.factor(df$SEX) df 데이터의 "SEX"변수를 범주형으로 바꾸어 df 데이터의 "SEX"변수로 저장하라. 이미 SEX변수가 있으므로 덮어쓰도록 한다.

 

다시 str() 함수를 사용하여 변수의 종류를 확인해보면 다음과 같이 변한 것을 알 수 있다.

코드

str(df)

 

결과

$ IDNO       : num [1:1000] 1 2 3 4 5 6 7 8 9 10 ...
 $ SEX        : Factor w/ 2 levels "0","1": 1 1 1 1 2 2 2 2 1 2 ...
 $ SMOK       : Factor w/ 3 levels "0","1","2": 2 3 1 1 3 2 2 2 2 1 ...
 $ ALCOHOL    : Factor w/ 2 levels "0","1": 2 2 1 1 2 2 2 2 2 1 ...
 $ RESID      : Factor w/ 3 levels "0","1","2": 2 3 3 1 2 3 1 3 1 1 ...
 $ TWIN       : Factor w/ 3 levels "0","1","2": 1 1 1 1 1 1 1 1 1 1 ...
 $ RH         : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ...
 $ HTN        : Factor w/ 2 levels "0","1": 2 2 1 2 2 1 1 1 2 1 ...
 $ SBP        : num [1:1000] 142 151 120 148 165 ...
 $ ALT        : num [1:1000] 39.1 37.4 31.4 19.7 35.6 ...
 $ AST        : num [1:1000] 45.7 37.4 33.6 23.4 27.6 ...
 $ ALT_POSTMED: num [1:1000] 38.4 28.6 34.9 32.8 32 ...
 $ FVC_pPRED  : num [1:1000] 73.4 54.7 121.5 77.6 91.6 ...
 $ TRANSPORT  : Factor w/ 3 levels "대중교통","도보",..: 2 2 2 2 1 1 2 3 1 1 ...

위에서 "IDNO", "SEX", "SMOK", "ALCOHOL", "RESID", "TWIN", "RH", "HTN", "TRANSPORT"의 변수 형태는 "num"이었는데 "Factor"로 바뀐 것을 알 수 있다.

 "SMOK"는 "Factor w/ 3 levels"이라고 적혀있는데, 이는 "Factor with 3 levels"의 약자로 "범주형 변수인데, 3개의 범주가 존재한다"는 뜻이다. 실제로도 '비흡연자', '과거 흡연자', '현재 흡연자'로 나누어놨으니 맞게 변환된 것을 알 수 있다.

 

연속형 변수, 문자형 변수로 바꾸기 - as.numeric(), as.character()

위와 같이 바꾸고 나서 가끔은 다시 연속형 변수로 바꾸거나 문자형 변수로 되돌려야 할 때가 있을 수 있다. 이때는 각각 as.numeric()과 as.character() 함수를 사용하면 된다. "RESID" 변수를 연속형 변수로, "TRANSPORT"변수를 문자형 변수로 되돌려보자.

 

코드

df$RESID<-as.numeric(df$RESID)
df$TRANSPORT<-as.character(df$TRANSPORT)

 

다시 str() 함수를 사용하여 변수의 종류를 확인해보면 원하는 대로 변한 것을 알 수 있다.

코드

str(df)

 

결과

 $ IDNO       : num [1:1000] 1 2 3 4 5 6 7 8 9 10 ...
 $ SEX        : Factor w/ 2 levels "0","1": 1 1 1 1 2 2 2 2 1 2 ...
 $ SMOK       : Factor w/ 3 levels "0","1","2": 2 3 1 1 3 2 2 2 2 1 ...
 $ ALCOHOL    : Factor w/ 2 levels "0","1": 2 2 1 1 2 2 2 2 2 1 ...
 $ RESID      : num [1:1000] 2 3 3 1 2 3 1 3 1 1 ...
 $ TWIN       : Factor w/ 3 levels "0","1","2": 1 1 1 1 1 1 1 1 1 1 ...
 $ RH         : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ...
 $ HTN        : Factor w/ 2 levels "0","1": 2 2 1 2 2 1 1 1 2 1 ...
 $ SBP        : num [1:1000] 142 151 120 148 165 ...
 $ ALT        : num [1:1000] 39.1 37.4 31.4 19.7 35.6 ...
 $ AST        : num [1:1000] 45.7 37.4 33.6 23.4 27.6 ...
 $ ALT_POSTMED: num [1:1000] 38.4 28.6 34.9 32.8 32 ...
 $ FVC_pPRED  : num [1:1000] 73.4 54.7 121.5 77.6 91.6 ...
 $ TRANSPORT  : chr [1:1000] "도보" "도보" "도보" "도보" ...

 

 

만약, 이 모든 것을 출력하고 싶지 않으면 (특히 변수가 많은 데이터의 경우 더더욱 그렇다) 특정 변수의 형태만 확인할 수도 있다.

"RESID"와 "TRANSPORT"의 형태를 확인해보자.

 

코드

str(df$RESID)
str(df$TRANSPORT)

 

결과

 num [1:1000] 2 3 3 1 2 3 1 3 1 1 ...
 
 chr [1:1000] "도보" "도보" "도보" "도보" "대중교통" ...

각각 "numeric"과 "character"로 나타나는 것을 알 수 있다.

 

코드 정리

#워킹 디렉토리 지정
setwd("C:/Users/user/Documents/Tistory_blog")

#데이터 불러오기
install.packages("readr")
library("readr")
df<-read_csv("Data.csv")

#데이터 변수 유형 확인하기
str(df)

#범주형 변수로 변경하기
df$SEX<-as.factor(df$SEX)
df$SMOK<-as.factor(df$SMOK)
df$ALCOHOL<-as.factor(df$ALCOHOL)
df$RESID<-as.factor(df$RESID)
df$TWIN<-as.factor(df$TWIN)
df$RH<-as.factor(df$RH)
df$HTN<-as.factor(df$HTN)
df$TRANSPORT<-as.factor(df$TRANSPORT)

#숫자형 변수로 변경하기
df$RESID<-as.numeric(df$RESID)

#문자형 변수로 변경하기
df$TRANSPORT<-as.character(df$TRANSPORT)

#특정 변수의 유형만 확인하기
str(df$RESID)
str(df$TRANSPORT)

 

 

참고로, as.factor()가 아닌 factor()라는 함수도 존재한다. 기능은 같으나 as.factor()가 특정 상황에서 조금 더 빠르게 작동하여 as.factor()를 본문에서는 소개했지만, factor() 함수를 사용해도 같은 결과를 내니 원하는 것을 사용하면 된다.

 

 

 

[R] 변수의 유형 (타입, type) 확인 및 변경 정복 완료!

 

작성일: 2022.11.21.

최종 수정일: 2022.11.21.

이용 프로그램: R 4.2.2

RStudio v2022.07.2

RStudio 2022.07.2+576 "Spotted Wakerobin" Release

운영체제: Windows 10, Mac OS 12.6.1

반응형
반응형

조건에 맞는 자료 추출하기

 

 조건에 맞는 자료만 따로 뽑아서 보고 싶을 때, 봐야 할 때가 존재한다. 가령 전체 데이터 중에서 고혈압 환자와, 정상인 환자를 따로따로 보고 싶을 때가 있듯이 말이다. 이때 할 수 있는 방법을 설명하고자 한다.

 

 총 네 가지 방법을 소개할 것이다.

(1) R 내장 함수를 사용하는 방법: 3가지
(2) dplyr을 사용하는 방법: 1가지

 

*실습용 데이터는 아래 링크를 클릭하면 다운로드할 수 있습니다.

2022.08.04 - [공지사항 및 소개] - 분석용 데이터 (update 22.10.11)

 

분석용 데이터 (update 22.10.11)

2022년 10월 11일 버전입니다. 변수는 계속하여 추가될 예정입니다. 다음 카테고리에 있는 글에서 이용된 데이터입니다. - 기술 통계 - 범주형 자료 분석 - 모평균 검정 - 반복 측정 자료 분석 - 통계

medistat.tistory.com

 

코드를 보여드리기에 앞서 워킹 디렉토리부터 지정하겠다.

워킹 디렉토리에 관한 설명은 다음 링크된 포스트에서 볼 수 있다.

2022.08.05 - [통계 프로그램 사용 방법/R] - [R] 작업 디렉토리 (Working Directory) 지정 - getwd(), setwd()

setwd("C:/Users/user/Documents/Tistory_blog")

 

데이터를 불러와 df에 객체로 저장하겠다.

데이터 불러오는 방법은 다음 링크에서 볼 수 있다.

2022.08.05 - [통계 프로그램 사용 방법/R] - [R] 데이터 불러오기 : EXCEL - read_excel(), read.xlsx()

2022.08.10 - [통계 프로그램 사용 방법/R] - [R] 데이터 저장하기 : CSV 파일 - write.csv(), write_csv()

2022.08.10 - [통계 프로그램 사용 방법/R] - [R] 데이터 불러오기 : SAS file (.sas7bdat) - read.sas7bdat(), read_sas()

 

install.packages("readr")
library("readr")
df<-read_csv("Data.csv")

 

목표: 고혈압이 있는 사람과 정상인 사람으로 데이터를 나눠보자

방법 (1) R 내장 함수를 사용하는 방법

 1. Indexing을 이용하는 방법

df_whtn<-df[df$HTN==1,]
df_wohtn<-df[df$HTN==0,]

df_whtn<-df[df$HTN==1,] df에서 HTN이 1인 행만 추출하여 df_whtn에 저장한다. (행이라서 쉼표 앞에 조건이 붙는다.) 
df_wohtn<-df[df$HTN==0,] df에서 HTN이 0인 행만 추출하여 df_wohtn에 저장한다. (행이라서 쉼표 앞에 조건이 붙는다.) 

 

 

2. which함수를 이용하는 방법

df_whtn1<-df[which(df$HTN==1),]
df_wohtn1<-df[which(df$HTN==0),]

df_whtn2<-df[which(df$HTN==1),] df에서 HTN이 1인 행만 추출하여 df_whtn1에 저장한다. (행이라서 쉼표 앞에 조건이 붙는다.) 
df_wohtn2<-df[which(df$HTN==0),] df에서 HTN이 0인 행만 추출하여 df_wohtn1에 저장한다. (행이라서 쉼표 앞에 조건이 붙는다.) 

 

 

3. subset함수를 이용하는 방법

df_whtn2<-subset(df,HTN==1)
df_wohtn2<-subset(df,HTN==0)

df_whtn2<-subset(df,HTN==1) df에서 HTN이 1인 행만 추출하여 df_whtn2에 저장한다. 
df_wohtn2<-subset(df,HTN==0) df에서 HTN이 0인 행만 추출하여 df_wohtn2에 저장한다. 

 

방법 (2) dplyr를 사용하는 방법

이를 위해서는 dplyr패키지의 설치가 필요하다. 설치에 관한 내용은 다음 글을 확인하길 바란다. 2022.08.05 - [통계 프로그램 사용 방법/R] - [R] 패키지 설치하기 - install.packages(), library()

install.packages("dplyr")
library("dplyr")

#조건에 따라 나누기
df_whtn3<-df %>% filter(HTN==1)
df_wohtn3<-df %>% filter(HTN==0)

df_whtn3<-df %>% filter(HTN==1) df에서 HTN이 1인 행만 추출하여 df_whtn3에 저장한다. 
df_wohtn3<-df %>% filter(HTN==0) df에서 HTN이 0인 행만 추출하여 df_wohtn3에 저장한다. 

 

"%>%"은 dplyr에서 chain operation이라고 불리는 연산자인데, Ctrl(Cmd for mac) + Shift + M이라는 단축키로 입력할 수 있고, 처음에는 어색해 보일 수 있지만 쓰다 보면 이렇게 편한 연산자가 없다. 이는 생각의 흐름대로 분석을 할 수 있게 해 준다.

 이 경우, "데이터 df을 가져와서 HTN1인 데이터만 고르는 필터링을 하라."로 이해할 수 있다.

 

[R] 조건에 맞는 자료 추출하기 정복 완료!

 

작성일: 2022.11.10.

최종 수정일: 2022.11.10.

이용 프로그램: R 4.1.3

RStudio v1.4.1717

RStudio 2021.09.1+372 "Ghost Orchid" Release 

운영체제: Windows 10, Mac OS 10.15.7

반응형
반응형

[R] 피셔 정확 검정에서 workspace 부족 에러 해결 방법

 

피셔 정확 검정 (Fisher's exact test)을 R로 구현하다 보면 다음과 같은 에러가 뜰 때가 있다.

 

1)

  FEXACT error 6.  LDKEY=592 is too small for this problem,   (ii := key2[itp=867] = 369304672, ldstp=17760)

Try increasing the size of the workspace and possibly 'mult'

 

2)

 FEXACT error 40. Out of workspace.

 

이럴 때에는 workspace를 늘려주어야 분석이 가능해진다.

Fisher's exact test를 시행하는 R 코드에서 다음과 같이 (workspace=2e8) 혹은 (workspace=2e9), ...과 같은 argument를 추가해주면 구동될 '수도' 있다. Fisher's exact test를 시행하는 R코드는 다음 링크에서 확인할 수 있다. 2022.09.02 - [범주형 자료 분석/R] - [R] 피셔 정확 검정 - fisher.test()

*실습용 데이터는 아래 링크를 클릭하면 다운로드할 수 있습니다.

2022.08.04 - [공지사항 및 소개] - 분석용 데이터 (update 22.10.11)

 

분석용 데이터 (update 22.10.11)

2022년 10월 11일 버전입니다. 변수는 계속하여 추가될 예정입니다. 다음 카테고리에 있는 글에서 이용된 데이터입니다. - 기술 통계 - 범주형 자료 분석 - 모평균 검정 - 반복 측정 자료 분석 - 통계

medistat.tistory.com

 

 

코드를 보여드리기에 앞서 워킹 디렉토리부터 지정하고 데이터를 불러와 df에 객체로 저장하겠다.

워킹 디렉토리에 관한 설명은 다음 링크된 포스트에서 볼 수 있다.

2022.08.05 - [통계 프로그램 사용 방법/R] - [R] 작업 디렉토리 (Working Directory) 지정 - getwd(), setwd()

 

데이터 불러오는 방법은 다음 링크에서 볼 수 있다.

2022.08.05 - [통계 프로그램 사용 방법/R] - [R] 데이터 불러오기 : EXCEL - read_excel(), read.xlsx()

2022.08.10 - [통계 프로그램 사용 방법/R] - [R] 데이터 저장하기 : CSV 파일 - write.csv(), write_csv()

2022.08.10 - [통계 프로그램 사용 방법/R] - [R] 데이터 불러오기 : SAS file (.sas7bdat) - read.sas7bdat(), read_sas()

 

 

(workspace=2e8) 혹은 (workspace=2e9), ...과 같은 argument를 추가하여 코드를 실행해보겠다.

#작업 디렉토리 지정
setwd("C:/Users/user/Documents/Tistory_blog")

#데이터 불러오기
install.packages("readr")
library("readr")
df<-read_csv("Data.csv")

#피셔 정확 검정 시행하기
fisher.test(df$SEX, df$RH, workspace=2e8)

 

물론 우리의 데이터는 그렇게 크지 않아 workspace가 부족하지 않으며, workspace를 늘려줄 필요도 없다. 하지만 만약 여러분의 데이터로 피셔 정확 검정을 시행하던 차에 저런 문제가 생기는 경우 workspace를 늘려보기를 권한다.

 

[R] 피셔 정확 검정 workspace 에러 해결 방법 정복 완료!

 

작성일: 2022.11.10.

최종 수정일: 2022.11.10.

이용 프로그램: R 4.1.3

RStudio v1.4.1717

RStudio 2021.09.1+372 "Ghost Orchid" Release 

운영체제: Windows 10, Mac OS 10.15.7

반응형
반응형

 

[R] 데이터 저장하기 : CSV 파일 - write.csv(), write_csv()

 

 R에서 만든 데이터를 파일로 내보내고 싶을 때가 있다. 지난번 ".xlsx"파일로 내보내기에 이어 ".csv"파일로 내보내는 방법을 확인해보도록 하겠다.

 

 먼저 저장할 데이터부터 만들겠다. 컴퓨터 내에 있는 엑셀 파일을 읽어와 데이터로 저장하겠다. 방법은 다음 링크를 참고하길 바란다.

2022.08.05 - [통계 프로그램 사용 방법] - [R] 데이터 불러오기 : EXCEL - read_excel(), read.xlsx()

 

[R] 데이터 불러오기 : EXCEL - read_excel(), read.xlsx()

[R] 데이터 불러오기 : EXCEL - read_excel(), read.xlsx() R은 SPSS나 SAS에 비해 많은 종류의 파일을 불러오고 사용하기에 적합하다. 하지만 각 파일마다 불러오는 방법이 다르며, 심지어는 한 종류의..

medistat.tistory.com

#Working Directory 지정
setwd("C:/Users/user/Documents/Tistory_blog")

#엑셀 파일 불러오기
install.packages("readxl")
library("readxl")
a<-read_excel("Data.xlsx")

 

이로써 a에는 "Data.xlsx"에 있던 데이터가 tibble로 저장되게 된다.

이를 다시 ".csv"파일로 내보내 보도록 하겠다.

이때 많이 쓰이는 함수는 두 가지가 있다. 편의에 따라 어떤 것을 사용해도 무관하지만 기본 내장 함수인 "write.csv()"를 더 많이 사용하게 된다.

 

write.csv() (패키지: utils)
write_csv() (패키지: readr)
# (1) write.csv()
# 코드 구조: write.csv(저장할 객체, "저장될 파일의 위치, 이름, 확장자") 

#패키지 설치하기
install.packages("utils") #기본 패키지이므로 설치할 필요 없음
library("utils")

#파일 내보내기
write.csv(a, "Datafile.csv")
#혹은
write.csv(a, "C:/Users/user/Documents/Tistory_blog/Datafile.csv")

코드의 구조를 살펴보면 write.csv()의 괄호 안에 다음 두 가지가 있다.

1) 저장할 객체

2) 저장될 파일의 위치, 이름, 확장자

 

write.csv(a, "Datafile.csv"): a라는 객체를 "Datafile"라는 파일 이름, ".csv"라는 파일 확장자로 이전에 설정한 작업 디렉토리에 저장하겠다는 뜻이다.

 

write.csv(a, "C:/Users/user/Documents/Tistory_blog/Datafile.csv"): 작업 디렉토리를 지정하지 않았거나, 다른 곳에 저장하고 싶으면 위치를 직접 적시해도 좋다.

 

# (2) write_csv()
# 코드 구조: write_csv(저장할 객체, "저장될 파일의 위치, 이름, 확장자") 

#패키지 설치하기
install.packages("readr")
library("readr")

#파일 내보내기
write_csv(a, "Datafile.csv")
#혹은
write_csv(a, "C:/Users/user/Documents/Tistory_blog/Datafile.csv")

 

"write.csv()"와 모든 구조가 같다.

 

R 데이터 저장하기 (내보내기) - CSV 파일 정복 완료!

 

작성일: 2022.08.10.

최종 수정일: 2022.08.10.

이용 프로그램: R 4.1.3

RStudio v1.4.1717

RStudio 2021.09.1+372 "Ghost Orchid" Release 

운영체제: Windows 10, Mac OS 10.15.7

반응형
반응형

 

[R] 데이터 저장하기 : EXCEL 파일 - write_xlsx(), write.xlsx()

 

 R에서 만든 데이터를 파일로 내보내고 싶을 때가 있다. 여러 파일 형식이 있지만 EXCEl 파일 (.xlsx) 형식으로 내보내는 방법부터 확인하고자 한다.

 

 먼저 저장할 데이터부터 만들겠다. 컴퓨터 내에 있는 엑셀 파일을 읽어와 데이터로 저장하겠다. 방법은 다음 링크를 참고하길 바란다.

2022.08.05 - [통계 프로그램 사용 방법] - [R] 데이터 불러오기 : EXCEL - read_excel(), read.xlsx()

 

[R] 데이터 불러오기 : EXCEL - read_excel(), read.xlsx()

[R] 데이터 불러오기 : EXCEL - read_excel(), read.xlsx() R은 SPSS나 SAS에 비해 많은 종류의 파일을 불러오고 사용하기에 적합하다. 하지만 각 파일마다 불러오는 방법이 다르며, 심지어는 한 종류의..

medistat.tistory.com

#Working Directory 지정
setwd("C:/Users/user/Documents/Tistory_blog")

#엑셀 파일 불러오기
install.packages("readxl")
library("readxl")
a<-read_excel("Data.xlsx")

이로써 a에는 "Data.xlsx"에 있던 데이터가 tibble로 저장되게 된다.

이를 다시 ".xlsx"파일로 내보내보도록 하겠다.

이때 많이 쓰이는 함수는 두 가지가 있다. 편의에 따라 어떤 것을 사용해도 무관하다.

 

write.xlsx() (패키지: openxlsx)
write_xlsx() (패키지: writexl)

 

내보내는 코드는 다음과 같다.

# (1) write.xlsx()
# 코드 구조: write.xlsx(저장할 객체, "저장될 파일의 위치, 이름, 확장자") 

#패키지 설치하기
install.packages("openxlsx")
library("openxlsx")

#파일 내보내기
write.xlsx(a, "Datafile.xlsx")
#혹은
write.xlsx(a, "C:/Users/user/Documents/Tistory_blog/Datafile.xlsx")

코드의 구조를 살펴보면 write.xlsx()의 괄호 안에 다음 두 가지가 있다.

1) 저장할 객체

2) 저장될 파일의 위치, 이름, 확장자

 

write.xlsx(a, "Datafile.xlsx"): a라는 객체를 "Datafile"라는 파일 이름, ".xlsx"라는 파일 확장자로 이전에 설정한 작업 디렉토리에 저장하겠다는 뜻이다.

 

write.xlsx(a, "C:/Users/user/Documents/Tistory_blog/Datafile.xlsx"): 작업 디렉토리를 지정하지 않았거나, 다른 곳에 저장하고 싶으면 위치를 직접 적시해도 좋다.

 

 

# (2) write_xlsx()
# 코드 구조: write_xlsx(저장할 객체, "저장될 파일의 위치, 이름, 확장자") 

#패키지 설치하기
install.packages("writexl")
library("writexl")

#파일 내보내기
write_xlsx(a, "Datafile.xlsx")
#혹은
write_xlsx(a, "C:/Users/user/Documents/Tistory_blog/Datafile.xlsx")

"write_xlsx()"도 모든게 똑같다.

 

 

R 데이터 저장하기 (내보내기) - EXCEL 파일 정복 완료!

 

작성일: 2022.08.10.

최종 수정일: 2022.08.10.

이용 프로그램: R 4.1.3

RStudio v1.4.1717

RStudio 2021.09.1+372 "Ghost Orchid" Release 

운영체제: Windows 10, Mac OS 10.15.7

 

반응형
반응형

[R] 데이터 불러오기 : SAS file (.sas7bdat) - read.sas7bdat(), read_sas()

 

이번엔 SAS 파일을 불러오는 방법을 소개한다.

SAS파일을 간혹 R로 가져올 필요가 있을 때가 있다. 특정 plot을 그리고 싶은데, SAS에서는 지원하지 않는다거나, 아니면 plot이 예쁘지 않거나, 새로운 분석 방법을 적용하고 싶을 때가 해당한다.

 

코드를 보여드리기에 앞서 워킹 디렉토리부터 지정하겠다.

워킹 디렉토리에 관한 설명은 다음 링크된 포스트에서 볼 수 있다.

2022.08.05 - [통계 프로그램 사용 방법] - [SAS] 라이브러리 만들기 - LIBNAME

 

[SAS] 라이브러리 만들기 - LIBNAME

[SAS] 라이브러리 만들기 - LIBNAME SAS를 접하자마자 마주치는 단어가 '라이브러리 (Library)'인데 생소하고 어색한 개념이라 쉽게 이해하기 어려울 것이 사실이다. 필자도 이를 받아들이기까지 짧

medistat.tistory.com

setwd("C:/Users/user/Documents/Tistory_blog")

 

*실습용 데이터는 아래 링크를 클릭하면 다운로드할 수 있습니다.

2022.08.04 - [공지사항 및 소개] - 분석용 데이터 (update 22.08.10)

 

분석용 데이터 (update 22.08.10)

2022년 08월 10일 버전입니다. 변수는 계속하여 추가될 예정입니다. 다음 카테고리에 있는 글에서 이용된 데이터입니다. - 기술 통계 - 통계 프로그램 사용 방법

medistat.tistory.com

 

SAS 파일 (.sas7bdat) 불러오기

많이들 쓰는 함수는 두 가지가 있다.

read.sas7bdat() (패키지: sas7bdat)
read_sas() (패키지: haven)

 

필자는 특별한 이유는 없지만 두 번째 함수를 더 선호한다.

 

 

각각의 패키지를 설치하고, 작업 디렉토리 내에 있는 "df.sas7bdat"파일을 불러오도록 하겠다.

 

install.packages("sas7bdat")
library("sas7bdat")
a<-read.sas7bdat("df.sas7bdat")

install.packages("haven")
library("haven")
b<-read_sas("df.sas7bdat")

1) [패키지: sas7bdat] read.sas7bdat()  

 불러온 SAS 파일을 dataframe으로 반환한다.

 

 

2) [패키지: haven] read_sas()  

불러온 SAS 파일을 tibble로 반환한다.

 

 

 

개인 선호도에 따라 아무 함수나 사용해도 큰 문제는 없다.

 

 

R 데이터 불러오기 - SAS 파일 정복 완료!

 

작성일: 2022.08.10.

최종 수정일: 2022.08.10.

이용 프로그램: R 4.1.3

RStudio v1.4.1717

RStudio 2021.09.1+372 "Ghost Orchid" Release 

운영체제: Windows 10, Mac OS 10.15.7

 

반응형

+ Recent posts