본문 바로가기
반응형

R 주제221

[R강의] 146. attach 함수와 detach 함수 내장데이터인 iris 를 이용하여 attach 함수와 detach 함수를 설명하겠습니다. iris 데이터에는 아래와 같이 다섯개의 열이 있습니다. > head(iris) Sepal.Length Sepal.Width Petal.Length Petal.Width Species 1 5.1 3.5 1.4 0.2 setosa 2 4.9 3.0 1.4 0.2 setosa 3 4.7 3.2 1.3 0.2 setosa 4 4.6 3.1 1.5 0.2 setosa 5 5.0 3.6 1.4 0.2 setosa 6 5.4 3.9 1.7 0.4 setosa 첫번째 열에 접근하는 방법은 여러가지가 있는데 그 중 한 가지를 예를 들면 아래와 같습니다. > iris['Sepal.Length'] iris 데이터에 attach 함수를.. 2023. 3. 23.
[R강의] 145. 변수목록 보기, 삭제하기 변수를 생성해봅시다. > a=3 > b=c(1,2,3) > c='hi' R스튜디오를 쓰는 분들은 오른쪽 위에 있는 environment 탭에서 변수 목록을 확인할 수 있고 삭제도 가능합니다. 오늘 알아볼 방법은 콘솔 창에서 변수 목록을 출력하고 삭제하는 방법입니다. 변수 목록을 출력할 때는 ls() 또는 ls.str() 을 이용합니다. > ls() [1] "a" "b" "c" > ls.str() a : num 3 b : num [1:3] 1 2 3 c : chr "hi" 변수를 삭제할 때는 rm( ) 을 사용합니다. 변수 이름을 넣으면 됩니다. > rm(a) > ls() [1] "b" "c" 여러 변수를 삭제할 때는 list 옵션에 벡터 형태로 입력합니다. 이름을 문자열로 입력해야 합니다. > rm(li.. 2023. 3. 20.
[R강의] 144.정규분포 함수 4종류 의미 (dnorm, pnorm, qnorm, rnorm) R에서 제공하는 정규분포 함수는 네 종류가 있습니다. 함수 이름과 입력값은 아래와 같습니다. dnorm(x, mean = 0, sd = 1, log = FALSE) pnorm(q, mean = 0, sd = 1, lower.tail = TRUE, log.p = FALSE) qnorm(p, mean = 0, sd = 1, lower.tail = TRUE, log.p = FALSE) rnorm(n, mean = 0, sd = 1) 하나씩 의미를 알아봅시다. dnorm dnorm 의 d는 density 입니다. dnorm 은 확률밀도함수를 의미합니다. x에서의 확률밀도값을 반환합니다. 종 모양의 정규분포함수에서 y값에 해당됩니다. pnorm pnorm 의 p는 probability 입니다. 누적확률을 의미합니.. 2023. 3. 20.
[R강의] 143. 엑셀 데이터 불러올 때 설명 행 없이 불러오기 아래와 같은 데이터가 있다고 합시다. 첫 두줄은 설명입니다. R에서 불러올 때 설명줄은 생략하고 불러오는 방법을 알아봅시다. [File]-[Import Dataset]-[From Excel] 을 클릭합니다. 데이터를 불러옵니다. 첫 두 줄을 생략하려면 Skip 에 2를 넣으면 됩니다. 2023. 3. 15.
[R강의] 142. var, sd 함수는 모집단일까 표본일까 var 함수 R에서 분산을 계산할 때 사용하는 var 함수가 모분산을 계산하는지 표본분산을 계산하는지 알아봅시다. data=c(1,2,3,4,5) #모 분산 직접 계산하기 var_cal_p=sum((data-mean(data))**2)/length(data) #표본 분산 직접 계산하기 var_cal_s=sum((data-mean(data))**2)/(length(data)-1) #var 함수 사용 var_fun=var(data) #출력 print(var_cal_p) print(var_cal_s) print(var_fun) > print(var_cal_p) [1] 2 > print(var_cal_s) [1] 2.5 > print(var_fun) [1] 2.5 var 로 계산된 결과가 표본분산임을 알 수 있.. 2023. 2. 27.
[R강의] 141. library 와 require 의 차이 둘의 역할은 동일합니다. 패키지를 로딩합니다. 차이는 아래와 같습니다. > require(AB) 필요한 패키지를 로딩중입니다: AB Warning message: In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE, : ‘AB’이라고 불리는 패키지가 없습니다 > library(AB) Error in library(AB) : ‘AB’이라고 불리는 패키지가 없습니다 패키지가 없는 경우 require 함수는 Warning 을 library 함수는 Error 을 출력합니다. 2023. 2. 27.
[R강의] 140. 데이터 프레임을 쉽게 조작하는 transform 함수 데이터프레임을 하나 정의합시다. num=1:10 score=c(78,62,65,94,71,97,57,83,71,96) md=data.frame(num,score) > md num score 1 1 78 2 2 62 3 3 65 4 4 94 5 5 71 6 6 97 7 7 57 8 8 83 9 9 71 10 10 96 둘째 열에 5를 더해서 셋째 열을 추가하는 상황을 가정합시다. 아래와 같이 인덱싱을 이용하여 추가할 수 있습니다. > md[,'add']=md$score+5 > md num score add 1 1 78 83 2 2 62 67 3 3 65 70 4 4 94 99 5 5 71 76 6 6 97 102 7 7 57 62 8 8 83 88 9 9 71 76 10 10 96 101 이번에는 tran.. 2023. 2. 27.
[R강의] 139. 데이터프레임 열이름, 행이름 출력하고 수정하기 데이터프레임을 하나 정의합시다. A=c(1,2,3) B=c(4,5,6) C=c(7,8,9) df=data.frame(A,B,C) > df A B C 1 1 4 7 2 2 5 8 3 3 6 9 열 이름은 names 함수로 가져옵니다. > names(df) [1] "A" "B" "C" 행이름은 rownames 로 가져옵니다. > rownames(df) [1] "1" "2" "3" 열 이름과 행 이름을 수정하는 방법은 아래와 같습니다. names(df)=c('C1','C2','C3') rownames(df)=c('R1','R2','R3') > df C1 C2 C3 R1 1 4 7 R2 2 5 8 R3 3 6 9 2023. 2. 3.
[R강의] 138. 데이터프레임 행 추가할 때 리스트를 사용해야하는 이유 데이터프레임에 행을 추가할 때 왜 리스트를 사용해야 하는지 이야기해보려고 합니다. 먼저 데이터프레임을 하나 정의하겠습니다. name=c('KYS','OJH','PSK') gender=c('M','F','M') height=c(182,165,177) df=data.frame(name,gender,height,stringsAsFactors=FALSE) > df name gender height 1 KYS M 182 2 OJH F 165 3 PSK M 177 1열은 이름, 2열은 성별, 3열은 키입니다. 사람 한명의 정보를 더 추가하고 싶은 상황입니다. 가장 쉽게 떠오르는 방법은 인덱싱을 통해 추가하는 것입니다. 아래와 같이 추가할 수 있습니다. > df[4,]=c('CYR','F',163) > df name.. 2023. 1. 31.
[R강의] 137. 데이터프레임 결합의 끝판왕 (merge) merge 함수는 두 데이터프레임을 합쳐주는 함수입니다. rbind 보다는 cbind 와 유사한데요. cbind와 구벌되는 점은 특정 열을 기준으로 하여 합친다는 것입니다. 총 네가지 방법이 있는데요. 그림을 보면 쉽게 이해가 되실겁니다. 데이터프레임을 가지고 직접 해봅시다. 사용할 두 데이터는 아래와 같습니다. A=data.frame(id=c(1,2,3),weight=c(78,88,98),height=c(170,175,180)) B=data.frame(id=c(2,3,4),math=c(75,85,85),eng=c(100,85,60)) 콘솔창에 입력해보면 아래와 같습니다. > A id weight height 1 1 78 170 2 2 88 175 3 3 98 180 > B id math eng 1 2 .. 2023. 1. 31.
[R강의] 136. rbind로 데이터프레임들 결합할 때, 구분하는 열 추가하기 데이터프레임을 두개 만들어봅시다. 하나는 남자의 키와 몸무게이고, 하나는 여자의 키와 몸무게 입니다. weight=c(78,88,98) height=c(170,175,180) male_df=data.frame(weight,height) weight=c(48,58,68) height=c(150,160,170) female_df=data.frame(weight,height) 우리는 두 데이터프레임을 합치고 싶은 상태인데요. 데이터프레임이 합쳐진 후에도 남녀를 구분하고 싶습니다. 각 데이터프레임에 열을 하나씩 추가합시다. 아래와 같이 입력합니다. male_df['gender']='M' female_df['gender']='F' 각 데이터프레임은 아래와 같이 변했습니다. > male_df weight heigh.. 2023. 1. 31.
[R강의] 135. 데이터프레임을 열로 결합하기 (cbind) 데이터프레임을 열로 결합하는 방법을 알아봅시다. 열로 결합한다는 것은 아래와 같은 결합을 뜻합니다. 이때 cbind 함수가 사용됩니다. cbind 는 column(열) 을 bind(결합하다) 를 의미합니다. cbind 를 사용하려면 합치려는 데이터프레임들의 '행 개수'가 같아야 합니다. 아래와 같은 데이터프레임이 있다고 합시다. A 반 학생 세명의 번호, 몸무게, 키입니다. A=data.frame(id=c(1,2,3), weight=c(78,88,98), height=c(170,175,180)) > A id weight HEight 1 1 78 170 2 2 88 175 3 3 98 180 아래와 같이 학생들의 수학,영어 점수를 추가로 조사하였다고 합시다. A2=data.frame(math=c(75,80.. 2023. 1. 25.
[R강의] 134. 데이터프레임 열이름이 다른 경우 rbind 적용하기 rbind 함수는 데이터프레임들의 행을 결합하는 함수입니다. 데이터프레임들의 열 이름이 같아야 사용이 가능합니다. 변수 종류는 같은데 열 이름이 다르게 쓰여진 경우에 rbind 함수를 적용하는 방법을 알아봅시다. 아래와 같은 두 데이터프레임이 있습니다. A=data.frame(id=c(1,2,3), weight=c(78,88,98), HEight=c(170,175,180)) B=data.frame(id=c(4,5,6), weight=c(58,68,78), height=c(140,155,160)) > A id weight HEight 1 1 78 170 2 2 88 175 3 3 98 180 > B id weight height 1 4 58 140 2 5 68 155 열 이름이 달라서 rbind 함수 적용.. 2023. 1. 25.
[R강의] 133. 데이터프레임을 행으로 결합하기 (rbind) 데이터프레임을 행으로 결합하는 방법을 알아봅시다. 행으로 결합한다는 것은 아래와 같은 결합을 뜻합니다. 이때 rbind 함수가 사용됩니다. rbind 는 row(행) 을 bind(결합하다) 를 의미합니다. rbind 를 사용하려면 합치려는 데이터프레임들의 '열 이름'이 같아야 합니다. R코드로 예를 들어봅시다. 두개의 데이터 프레임을 생성합시다. A=data.frame(id=c(1,2,3), weight=c(78,88,98), height=c(170,175,180)) B=data.frame(id=c(4,5,6), weight=c(58,68,78), height=c(140,155,160)) 콘솔창에 출력해보면 아래와 같습니다. > A id weight height 1 1 78 170 2 2 88 175 3.. 2023. 1. 24.
[R강의] 138. 엑셀파일 수백개를 자동으로 불러와서 for문과 rbind 이용하여 결합하기 아래와 같이 엑셀파일이 있다고 합시다. 어떤 도시에 사는 사람을 모집해서 나이와 키를 조사한 것입니다. 도시마다 따로 조사했기 때문에 각각의 엑셀파일이 있습니다. 파일이 수백개라고 가정합시다. R에서 엑셀파일을 불러오는 방법은 아래와 같습니다. setwd('경로') read_excel('파일이름.xlsx') 예시는 아래와 같습니다. 아래 경로는 제 컴퓨터에 파일이 들어있는 경로이고, 경로는 여러분이 파일을 넣은 경로로 설정하셔야 합니다. library(readxl) library(dplyr) setwd('C:/Users/PC1/Documents/data') df1=read_excel("city1.xlsx") %>% as.data.frame 만약 엑셀파일이 수백개라면 마지막줄을 백번 적어야 합니다. df1.. 2023. 1. 19.
[R강의] 132. 여러 점들 사이의 거리 한번에 구하는 법 (dist함수) 아래와 같이 5개의 점이 있다고 합시다. P1=c(1,2,3) P2=c(3,5,2) P3=c(5,5,4) P4=c(1,4,7) P5=c(2,2,4) 이들 중 어느 두 점이 가장 가까운 거리에 있는지 알고 싶은 상황입니다. 유클리드 거리를 행렬 형태로 출력해주는 함수가 있습니다. dist 함수입니다. 먼저 위 점들을 하나의 행렬로 묶어줍니다. mat1=matrix(c(P1,P2,P3,P4,P5),byrow=TRUE,nrow=5) > mat1 [,1] [,2] [,3] [1,] 1 2 3 [2,] 3 5 2 [3,] 5 5 4 [4,] 1 4 7 [5,] 2 2 4 위에서 만든 행렬에 dist 함수를 적용해봅시다. > dist(mat1) 1 2 3 4 2 3.741657 3 5.099020 2.828427 .. 2022. 12. 23.
[R강의] 131. 연속형 변수를 구간에 따라 범주형 변수로 바꾸는 방법 점수를 학점으로 바꿔봅시다. 바꾸는 기준은 아래와 같습니다. 점수는 연속형 변수이고, 학점은 범주형 변수입니다. R에는 위와 같이 범위로 표현된 연속형 변수를 범주형 변수로 바꿔주는 함수가 있습니다. cut 함수를 사용합니다. 먼저 데이터를 생성합시다. 10명의 점수를 생성하겠습니다. num은 번호이고 score 은 점수입니다. #데이터 생성 num=1:10 score=c(78,62,65,94,71,97,57,83,71,100) md=data.frame(num,score) > md num score 1 1 78 2 2 62 3 3 65 4 4 94 5 5 71 6 6 97 7 7 57 8 8 83 9 9 71 10 10 100 cut 함수는 아래와 같이 사용합니다. #점수를 학점으로 변환 gpa=cut(.. 2022. 12. 23.
[R강의] 145. 함수 입력 변수를 이름으로 사용하는 법 (eval) 함수에서 변수를 입력받을 때, 변수 이름을 문자열로 사용하는 방법입니다. deparse(substitute(변수이름)) 을 사용하면 됩니다. fun1=function(param1) { param_name=deparse(substitute(param1)) print( param_name ) } 작동이 잘 되는지 확인해봅시다. > fun1(hi) [1] "hi" 2022. 12. 22.
[R강의] 144. 엑셀에서 데이터 불러와서 분할표 만들고 카이제곱검정 또는 피셔의 정확검정 하기 아래와 같은 범주형 데이터가 있습니다. 남자 10명과 여자 10명을 대상으로 무서운 영화 선호 여부를 조사한 것입니다. 우리는 위 데이터를 아래와 같은 형태의 표로 만들고 카이제곱검정을 하고 싶은 상황입니다. 남자 여자 무서운영화 선호 OO명 OO명 무서운 영화 비선호 OO명 OO명 1. 데이터 불러오기 먼저 아래 데이터를 다운받습니다. R에서 아래 메뉴를 클릭합니다. Browse를 누르고 데이터를 불러옵니다. Import를 누르지 말고, 우측 하단에 Code Preview 내용을 복사해서 스크립트 창에 붙여넣습니다. 아래와 같이 변수 이름을 간단하게 만들어줍니다. library(readxl) dt chisq.test(tb) Pearson's Chi-squared test with Yates' conti.. 2022. 12. 21.
[R 코딩 연습문제] 함수 사용 문제 아래와 같은 데이터프레임을 입력받아서, > df_wh w h 1 63 163 2 67 177 3 88 185 아래 결과를 출력하는 함수를 만드시오. > bmi2(df_wh) w h bmi 1 63 163 23.71184 2 67 177 21.38594 3 88 185 25.71220 정답 w=c(63,67,88) h=c(163,177,185) df_wh=data.frame(w,h) bmi1=function(myvec) { return(myvec[1]/myvec[2]^2*1e4) } bmi2=function(mydf) { bmi=apply(mydf,1,bmi1) result=cbind(df_wh,bmi) return(result) } 2022. 11. 7.
[R 코딩 연습문제] 누적분포 그래프 그리기 (R 코딩실력 향상을 위한 연습문제입니다.) Question 아래 데이터의 누적분포 그래프를 그리시오. 1,2,7,8,10,11,13,15,17,19 Answer data=c(1,2,7,8,10,11,13,15,17,19) cd=1:length(data)/length(data) plot(data,cd) 2022. 5. 13.
[R 코딩 연습문제] 가장 가까운 원소 인덱스 출력 (R 코딩실력 향상을 위한 연습문제입니다.) Question 주어진 데이터는 아래와 같다. data=1:100 1~100 사이의 임의의 실수가 주어졌을 때 해당 값과 가장 가까운 data 원소의 index 를 출력하는 코드를 작성하시오. 가장 가까운 숫자가 두개인 경우 둘 중 아무거나 출력해도 됩니다. Answer data=1:100 a=24.5 order(abs(data-a))[1] 2022. 5. 11.
[R 코딩 연습문제] 두배씩 커지는 수열 만들기 (R 코딩실력 향상을 위한 연습문제입니다.) Question 특정한 숫자로 부터 두배씩 커지는 수열을 만드시오. 시작 숫자와 원소의 개수를 설정할 수 있도록 하시오. Answer sequence=10 length=5 for (i in 1:length){ sequence[i+1]=sequence[i]*2 } 출력결과 > sequence [1] 10 20 40 80 160 320 2022. 5. 5.
[R강의] 999. 평균절대편차, 중앙값절대편차 구하는 법 1) 중앙값 절대편차 (median absolute deviation, mad) mad 함수 사용 > dt=c(1,2,3,4,50) > mad(dt) [1] 1.4826 2) 평균 절대편차 (average absolute deviation, aad) lsr 패키지 필요 install.packages("lsr") library(lsr) aad 함수 사용 > dt=c(1,2,3,4,50) > aad(dt) [1] 15.2 2022. 4. 30.
[R강의] 140. For 문을 While 문으로 바꾸는 방법 For 문을 While 문으로 바꾸는 방법을 알아봅시다. 실제 데이터분석을 할 때 For 문을 While 문으로 바꿀 일은 거의 없을 것입니다. R 수업 예제문제나 시험문제 정도로 나올 수 있겠네요. 연습삼아 해봅시다. 3의 배수를 3부터 30까지 출력하는 For문입니다. for (i in 1:10){ print(3*i) } 결과는 아래와 같습니다. [1] 3 [1] 6 [1] 9 [1] 12 [1] 15 [1] 18 [1] 21 [1] 24 [1] 27 [1] 30 위 For 문을 While 문으로 바꾸면 아래와 같습니다. i=1 while(i 2022. 4. 28.
[R 코딩 연습문제] 피타고라스 음계 구하기 Question) 피타고라스 음계의 진동수를 구하는 수열은 아래와 같습니다. $a_{1}=1, a_{n+1}=\left\{\begin{matrix} \frac{3}{2}a_{n} & (n \ is \ odd)\\ \frac{3}{4}a_{n} & (n \ is \ even) \end{matrix}\right.$ 변수 n에 값을 입력하면, 해당 값까지의 수열을 출력해주는 코드를 만드시오. Answer) an=1 n=15 for (i in 2:n){ if (i%%2 ==0) # 짝수 {an[i]=an[i-1]*3/2} else if (i%%2 ==1) # 홀수 {an[i]=an[i-1]*3/4} } print(an) 출력결과 > print(an) [1] 1.000000 1.500000 1.125000 1.6.. 2022. 4. 2.
[R강의] 130. 데이터프레임 열 인덱싱 결과는 두 가지 입니다. 데이터프레임의 열에 접근할 때, 인덱싱 결과는 두 가지입니다. 하나는 데이터프레임이구요. 다른 하나는 벡터입니다. 우리가 원하는 결과를 의도하고 인덱을 해주어야 하는데요. 방법을 알아봅시다. 먼저 데이터프레임을 하나 정의해봅시다. A=c(5,4,7,6,2,1,3) B=c(1,2,3,4,5,6,7) df=data.frame(A,B) > df A B 1 5 1 2 4 2 3 7 3 4 6 4 5 2 5 6 1 6 7 3 7 첫번째 열에 접근하다고 할 때, 결과가 데이터프레임인 경우는 아래와 같습니다. > df['A'] A 1 5 2 4 3 7 4 6 5 2 6 1 7 3 > df[1] A 1 5 2 4 3 7 4 6 5 2 6 1 7 3 열의 이름을 사용하거나 열 번호를 사용하면 되는데요. 행을 명시하지 않.. 2022. 4. 2.
통계프로그램 R로 피아노 연주하기 C4를 연주하는 예시입니다. library(music) playNote("C4",plot=TRUE,duration=2) music 패키지 설치해주시면 됩니다. duration 은 길이입니다. 아래 피아노가 출력되며 연주합니다. > playNote("C4",plot=TRUE,duration=2) | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | C | D | E | F | G | A | B | C | D | E | F | G | A | B | C | Notes: C4 2022. 4. 2.
[R강의] 134. 여러 점들 사이의 코사인 거리 한번에 구하는 법 (dist함수) 아래와 같이 5개의 점이 있다고 합시다. P1=c(1,2,3) P2=c(3,5,2) P3=c(5,5,4) P4=c(1,4,7) P5=c(2,2,4) 이들 중 어느 두 점이 가장 가까운 거리에 있는지 알고 싶은 상황입니다. 일반적으로 알고 있는 유클리드 거리가 아닌 코사인 거리를 행렬 형태로 출력해보겠습니다. 코사인 각도는 원점과 각 점을 잇는 벡터들 사이 각도의 코사인 값입니다. 먼저 위 점들을 하나의 행렬로 묶어줍니다. mat1=matrix(c(P1,P2,P3,P4,P5),byrow=TRUE,nrow=5) > mat1 [,1] [,2] [,3] [1,] 1 2 3 [2,] 3 5 2 [3,] 5 5 4 [4,] 1 4 7 [5,] 2 2 4 코사인 거리를 계산할 때는 dist 함수에서 method 를 .. 2022. 2. 19.
[R강의] 129. 분할표 만들기 (빈도, 비율) 남자 100명과 여자 100명을 임의로 선정하여 기름종이 사용여부를 조사하고 분할표로 만드는 예시입니다. 먼저 데이터를 생성합시다. rbinom 함수를 이용하여 이항분포에서 임의로 추출했습니다. 남자는 기름종이 사용확률을 30%로, 여자는 70%로 놓았습니다. rbinom(number,size,probability) 인데 size에 1을 입력하면 0과 1 둘중 하나가 추출됩니다. #1.데이터 생성 set.seed(9999) male=rbinom(100,1,0.3) female=rbinom(100,1,0.7) 추출 결과는 아래와 같습니다. > male [1] 1 0 1 0 0 1 0 1 1 1 1 0 0 1 0 1 1 0 1 0 0 1 1 0 0 0 0 [28] 0 0 0 0 0 0 0 1 0 0 1 1 .. 2021. 12. 31.
반응형