본문 바로가기
반응형

5. 자료구조66

[R 코딩] 벡터 여러개 합쳐서 벡터 만들기 아래와 같은 두 벡터가 있다고 합시다. > v1=c(1,2,3) > v2=c(4,5,6) 하나로 합쳐봅시다. > c(v1,v2) [1] 1 2 3 4 5 6 숫자형과 문자형이 함께 있는 경우 문자형으로 통일됩니다. > v1=c(1,2,3) > v2=c("a","b","c") > c(v1,v2) [1] "1" "2" "3" "a" "b" "c" 2020. 12. 15.
[R코딩] array 함수 없이 벡터로 배열 만드는 방법 array 함수는 보통 아래와 같이 만듭니다. > ar=array(1:4,dim=c(3,3,2)) > ar , , 1 [,1] [,2] [,3] [1,] 1 4 3 [2,] 2 1 4 [3,] 3 2 1 , , 2 [,1] [,2] [,3] [1,] 2 1 4 [2,] 3 2 1 [3,] 4 3 2 벡터에 dim 함수를 적용해도 array가 생성됩니다. dim이 2차원이면 matrix가 생성됩니다. > v1=1:18 > dim(v1)=c(3,3,2) > v1 , , 1 [,1] [,2] [,3] [1,] 1 4 7 [2,] 2 5 8 [3,] 3 6 9 , , 2 [,1] [,2] [,3] [1,] 10 13 16 [2,] 11 14 17 [3,] 12 15 18 단, array 함수에서 가능했던 반복규.. 2020. 12. 15.
[R 코딩] 배열,행렬 생성 시 사용 가능한 반복규칙 배열에서는 아래와 같은 생성이 가능합니다. > ar=array(c(1,2,3,4),dim=c(3,5)) > ar [,1] [,2] [,3] [,4] [,5] [1,] 1 4 3 2 1 [2,] 2 1 4 3 2 [3,] 3 2 1 4 3 전체 차원의 원소수보다 적게 입력해도, 행방향으로 반복하여 입력합니다. 행렬에서도 가능합니다. > m=matrix(c(1,2,3,4),3,5) Warning message: In matrix(c(1, 2, 3, 4), 3, 5) : data length [4] is not a sub-multiple or multiple of the number of rows [3] > m [,1] [,2] [,3] [,4] [,5] [1,] 1 4 3 2 1 [2,] 2 1 4 3 2 .. 2020. 12. 15.
[R 코딩] matrix 함수 없이 벡터에서 행렬만들기 보통 행렬은 아래와 같이 만듭니다. > m1=matrix(c(1,2,3,4),2) > m1 [,1] [,2] [1,] 1 3 [2,] 2 4 위 방법 말고 벡터를 정의한 뒤 dim 함수를 이용하여 만들 수도 있습니다. > v1=c(1,2,3,4) > dim(v1)=c(2,2) > v1 [,1] [,2] [1,] 1 3 [2,] 2 4 2020. 12. 15.
[R코딩] mode,class,typeof 함수의 차이 객체들에 적용한 결과입니다. class 함수가 가장 디테일하게 구분해줍니다. 객체 예시 mode 함수 적용 class 함수 적용 typeof 함수 숫자 3 numeric numeric double 문자열 "hi" character character character 숫자벡터 c(1,2,3) numeric numeric double 문자열벡터 c("hi","hello") character character character Factor factor(c("A","A","B") numeric factor integer 리스트 list(c(1,2),c("A)) list list list 데이터프레임 data.frame(c(1,2)) list data.frame list 행렬 matrix(c(12,3,4),2,2.. 2020. 12. 15.
R 데이터프레임 인덱싱 벡터로 출력 요약 : 데이터프레임 인덱싱에서 대괄호를 한겹 더 씌우면 문자열인 열의 경우는 'factor'로 숫자인 열의 경우는 'vector'로 출력됨 데이터프레임의 원소를 벡터로 출력하는 방법을 알아봅시다. 데이터프레임을 하나 정의합시다. > df=data.frame(Name=c("marry","tim","kate"),Height=c(163,172,168)) > df Name Height 1 marry 163 2 tim 172 3 kate 168 첫 열에 접근해봅시다. > df[1] Name 1 marry 2 tim 3 kate > class(df[1]) [1] "data.frame" 데이터프레임 형태로 출력합니다. 대괄호를 한겹 더 씌워봅시다. > df[[1]] [1] marry tim kate Levels: .. 2020. 12. 15.
[R 코딩] 평면분할표 ftable 함수 출력옵션 ftable 함수의 기본적인 설명은 아래 링크로 대신합니다. rbasall.tistory.com/160 [R 코딩] 평면분할표 ftable (3차원 이상의 table을 계층화) ftable 함수는 table을 계층화해주는 함수입니다. 3차원 이상의 table부터 의미가 있습니다. 예시를 통해 이해해봅시다. 먼저 3차원 table을 하나 정의해봅시다. 타이타닉호에 탑승한 5사람의 대 rbasall.tistory.com 내장데이터인 타이타닉데이터를 이용하여 ftable 함수의 출력옵션을 알아봅시다. 먼저 타이타닉데이터를 살펴봅시다. > str(Titanic) 'table' num [1:4, 1:2, 1:2, 1:2] 0 0 35 0 0 0 17 0 118 154 ... - attr(*, "dimnames").. 2020. 12. 12.
[R 코딩] 평면분할표 ftable (3차원 이상의 table을 계층화) ftable 함수는 table을 계층화해주는 함수입니다. 3차원 이상의 table부터 의미가 있습니다. 예시를 통해 이해해봅시다. 먼저 3차원 table을 하나 정의해봅시다. 타이타닉호에 탑승한 5사람의 대한 데이터입니다. class 는 탑승객 좌석등급, age는 나이입니다. > class=c("1st","1st","2nd","3rd","Crew") > gender=c("M","M","M","F","F") > age=c("성인","성인","아이","아이","성인") > tab2=table(class,gender,age) > tab2 , , age = 성인 gender class F M 1st 0 2 2nd 0 0 3rd 0 0 Crew 1 0 , , age = 아이 gender class F M 1st .. 2020. 12. 12.
[R 코딩] 3차원 table 우리에게 익숙한 table 은 2차원 table 입니다. 예를 들면 아래와 같습니다. class 는 승객 등급, gender는 성별입니다. 타이타닉호에 탑승한 다섯 사람에 대한 정보입니다. > class=c("1st","1st","2nd","3rd","Crew") > gender=c("M","M","M","F","F") > tab1=table(class,gender) > tab1 gender class F M 1st 0 2 2nd 0 1 3rd 1 0 Crew 1 0 만약 한가지 정보를 더 추가하면 어떻게 될까요?? 나이 정보를 추가하고 테이블을 만들어봅시다. > class=c("1st","1st","2nd","3rd","Crew") > gender=c("M","M","M","F","F") > age=c.. 2020. 12. 12.
[R] 테이블에서 열 또는 행 위주로 정리(주변표) 먼저 테이블을 하나 정의합시다. 다섯 사람의 성별과 혈액형 데이터입니다. > gender=c("M","M","F","F","M") > btype=c("A","B","B","A","B") > mt=table(gender,btype) > mt btype gender A B F 1 1 M 1 2 행 위주로 정리해봅시다. margin.table( ) 함수에서 margin 옵션을 1로 입력합니다. > margin.table(mt,1) gender F M 2 3 이번에는 열 위주로 정리해봅시다. > margin.table(mt,2) btype A B 2 3 2020. 12. 12.
[R] 테이블을 비율로 변환 먼저 테이블을 하나 정의합시다. 다섯 사람의 성별과 혈액형 데이터입니다. > gender=c("M","M","F","F","M") > btype=c("A","B","B","A","B") > mt=table(gender,btype) > mt btype gender A B F 1 1 M 1 2 비율로 바꿔봅시다. 함수는 prob.table() 입니다. 전체 합이 1이 되도록 비율로 바꾼 것입니다. > prop.table(mt) btype gender A B F 0.2 0.2 M 0.2 0.4 이번에는 옵션을 추가해봅시다. margin 옵션입니다. margin=1 로 설정할 경우 각 행의 합이 1이 되도록 비율로 바꾸는 것입니다. > prop.table(mt,margin=1) btype gender A B F.. 2020. 12. 12.
R 벡터 인덱싱 뒤에서부터 몇개 R 벡터 인덱싱 뒤에서부터 몇개 R에서 벡터가 하나 있다고 합시다. > v1=1:100 뒤에서 부터 17개를 인덱싱하고 싶습니다. 쉽게 하는 방법은 tail 함수를 사용하는 것입니다. > tail(v1,17) [1] 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 2020. 12. 8.
R 벡터 인덱싱 '끝까지' R 벡터 인덱싱 '끝까지' 아래 데이터가 있다고 합시다. v1=1:50 20번째 순서 부터 끝까지 인덱싱을 하고 싶습니다. 벡터의 길이가 계속 바뀔 수 있어 50이라고 입력하지 않는 방법을 원하는 상황입니다. 파이썬의 경우 아래와 같이 하면 됩니다. v1[20:] 끝나는 부분을 비워두면 되는 것입니다. R은 이런 기능이 없습니다. 편법을 사용해야 합니다. R는 인덱싱을 음수로 하면 원소의 제거가 가능합니다. 따라서 아래와 같이 입력하며 됩니다. > v1[-(1:19)] [1] 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48[30] 49 50 2020. 12. 8.
[R] 벡터원소 이름으로 인덱싱 [R] 벡터원소 이름으로 인덱싱 벡터원소의 이름을 지정하면 이름으로 인덱싱이 가능합니다. 벡터 원소 이름 지정은 names 함수를 이용합니다. > v1=c(1,2,3)> names(v1)=c("A","B","C")> v1A B C 1 2 3 이름으로 인덱싱 하는 방법은 아래와 같습니다. > v1["A"]A 1 > v1[c("A","C")]A C 1 3 2020. 11. 30.
[R] 벡터의 비교 [R] 벡터의 비교 두 벡터에 비교 연산자를 적용하면 각 원소의 비교 결과를 출력해줍니다. > V1=c(1,2,3)> V2=c(1,2,5)> V1==V2[1] TRUE TRUE FALSE> V1>V2[1] FALSE FALSE FALSE> V1 V1=c(1,2,3)> V2=c(1,2,3,4)> V1==V2[1] TRUE TRUE TRUE FALSEWarning message:In V1 == V2 : longer object length is not a multiple of shorter object length 2020. 11. 30.
R 데이터프레임 크기 확인하는 방법 (행과열의수) R 데이터프레임 크기 확인하는 방법 (행과열의수) 데이터프레임을 하나 정의합시다. > md=data.frame(name=c("a","b","c"),age=c(11,24,13))> md name age1 a 112 b 243 c 13 행과열의 수를 한번에 출력하려면 dim 함수를 이용하면 됩니다. 앞이 행, 뒤가 열입니다. > dim(md)[1] 3 2 행의 수만 출력하려면 nrow 함수를 이용하면 됩니다. > nrow(md)[1] 3 열의 수만 출력하려면 ncol 함수를 이용하면 됩니다. > ncol(md)[1] 2 2020. 11. 27.
R 데이터프레임 열 방향으로 합치기 R 데이터프레임 열 방향으로 합치기 열 방향을 좌->우 를 의미합니다. 데이터프레임을 행방향으로 합칠 때는 cbind 함수를 사용합니다. 행방향결합을 하기 위한 조건은 데이터프레임의 행의 길이가 같아야한다는 것입니다. 데이터프레임 두개를 정의해봅시다. > data1=data.frame(name=c("KLT","LML","PSK"),age=c(14,16,23))> data1 name age1 KLT 142 LML 163 PSK 23> data2=data.frame(sex=c("F","F","M"),married=c("N","Y","Y"))> data2 sex married1 F N2 F Y3 M Y cbind 함수를 이용하여 하나로 합쳐봅시다. > cbind(data1,data2) name age sex .. 2020. 11. 27.
R 데이터프레임 행 방향으로 합치기 R 데이터프레임 행 방향으로 합치기 행방향은 위->아래 방향을 의미합니다. 데이터프레임을 행방향으로 합칠 때는 rbind 함수를 사용합니다. 행방향결합을 하기 위한 조건은 열이름이 같아야 한다는 것입니다. 데이터프레임 두개를 정의해봅시다. > data1=data.frame(name=c("KLT","LML","PSK"),age=c(14,16,23))> data1 name age1 KLT 142 LML 163 PSK 23> data2=data.frame(name=c("LLT","HTK"),age=c(25,32))> data2 name age1 LLT 252 HTK 32 rbind 함수를 이용하여 하나로 합쳐봅시다. > rbind(data1,data2)name age1 KLT 142 LML 163 PSK 23.. 2020. 11. 27.
[R기초] 리스트는 언제 사용할까? [R기초] 리스트는 언제 사용할까? R을 공부하다 보면 자료구조라는 것을 배우게 됩니다. 자료를 담는 그릇인데 아래와 같은 것들이 있습니다. - 벡터- 행렬- 배열- 리스트- 요인- 데이터프레임- 테이블 이들 중 "이건 왜있지?" 라는 생각이 드는 자료구조가 있었습니다. 바로 '리스트'입니다. 지금은 R 초보자는 벗어났다고 생각하는데, 초보 시절에는 리스트의 존재 이유를 알기가 어려웠습니. 따라서 거의 사용하지도 않았습니다. 지금은 없어서는 안될 존재입니다. 오늘은 내가 경험한 리스트의 용도 중 하나를 공유하려고 합니다. 상황을 하나 가정하겠습니다. 10개의 벡터를 만들어야 하는 상황입니다. 10개의 벡터를 만들고 각각의 벡터에 0과 10사이의 임의의 숫자 5개를 넣으려고 합니다. 아래와 같은 코드를 짜.. 2020. 9. 16.
[R 기초] 리스트 인덱싱 하는 방법 [R 기초] 리스트 인덱싱 하는 방법 먼저 리스트를 하나 정의하겠습니다. 벡터 두개와 데이터프레임하나를 넣었습니다. v1=c(1,2,3)v2=c("a","b","c")d1=data.frame(v1,v2) mylist=list(v1,v2,d1) 아래와 같이 생성되었습니다. > mylist[[1]][1] 1 2 3 [[2]][1] "a" "b" "c" [[3]] v1 v21 1 a2 2 b3 3 c 리스트 인덱싱은 크게 세가지가 있는데요. 리스트 자체를 인덱싱하는 방법과, 구성요소에 접근하는 방법과, 구성요소의 원소에 접근하는 방법입니다. 1) 리스트 인덱싱 첫번째 리스트에 접근해보겠습니다. > mylist[1][[1]][1] 1 2 3 이렇게 접근할 경우 자료형은 list가 됩니다. 첫번째 리스트와 두번째.. 2020. 9. 16.
[R] table 형태를 유지하며 데이터프레임으로 [R] table 형태를 유지하며 데이터프레임으로 먼저 테이블을 하나 만들어봅시다. v1=c("F","F","M","M","M") v2=c("A","B","C","A","B") d=data.frame(v1,v2) t=table(d) > t v2 v1 A B C F 1 1 0 M 1 1 1 이 형태를 그대로 데이터 프레임으로 만들고 싶은데요. as.data.frame을 적용하면 아래와 같이 변형됩니다. > as.data.frame(t) v1 v2 Freq 1 F A 1 2 M A 1 3 F B 1 4 M B 1 5 F C 0 6 M C 1 이때는 as.data.frame.matrix 함수를 사용하면 됩니다. > as.data.frame.matrix(t) A B C F 1 1 0 M 1 1 1 2020. 8. 31.
[R] 분할표를 자동으로 만들어주는 table 함수 [R] 분할표를 자동으로 만들어주는 table 함수 table 함수는 범주형 자료의 분할표를 만들 때 사용됩니다. 예를들어 아래 벡터가 있다고 합시다. v=c("F","F","M","M","M") table 함수를 적용하면 아래와 같습니다. > table(v) v F M 2 3 위 경우는 변수가하나인 경우입니다. 변수가 2개인 경우도 살펴봅시다. v1=c("F","F","M","M","M") v2=c("A","B","C","A","B") d=data.frame(v1,v2) > table(d) v2 v1 A B C F 1 1 0 M 1 1 1 2020. 8. 31.
R 데이터프레임 인덱싱을 파라미터로 접근하기 R 데이터프레임 인덱싱을 파라미터로 접근하기 데이터프레임의 인덱싱 방법은 크게 두가지가 있습니다. $를 사용하는 방법과 [ ]을 사용하는 방법입니다. 물론 함께 사용할 수도 있습니다. 둘의 차이를 간단히 알아봅시다. 먼저 데이터프레임을 하나 만들어봅시다. > myd=data.frame(A=c(90,84,66,35),B=c(96,46,73,62),C=c(77,57,46,36)) > myd A B C 1 90 96 77 2 84 46 57 3 66 73 46 4 35 62 36 한 반의 학생이 4명인 A,B,C반의 수학점수입니다. $을 이용하여 A반에 접근해봅시다. > myd_A=myd$A > typeof(myd_A) [1] "double" 벡터가 반환됩니다. 이번에는 [ ] 을 이용하여 접근해봅시다. > .. 2020. 4. 28.
R 데이터프레임 행이름 리셋하는 법 R 데이터프레임 행이름 리셋하는 법 먼저 데이터프레임을 하나 정의합시다. a=1:5b=11:15c=101:105 mydata=data.frame(a,b,c) 정의한 데이터프레임은 아래와 같습니다. > mydata a b c1 1 11 1012 2 12 1023 3 13 1034 4 14 1045 5 15 105 이 데이터프레임의 1,3,5행을 mydata2라는 데이터프레임에 입력하겠습니다. mydata2=mydata[c(1,3,5),] 결과는 아래와 같습니다. 행 이름도 1,3,5가 되어 있는 것을 알 수 있습니다. > mydata2 a b c1 1 11 1013 3 13 1035 5 15 105 행 이름을 1,2,3으로 리셋하려면, 아래와 같은 코드를 입력하면 됩니다. rownames(mydata2)=.. 2020. 4. 6.
R 배열(array)정의, 이름 지정 R 배열(array)정의, 이름 지정 배열은 행렬과 벡터를 포함하는 개념입니다. 벡터는 1차원 배열이고, 행렬은 2차원 배열입니다. 배열은 n차원까지 정의가 가능합니다. 배열은 array 함수를 이용하여 정의합니다. 행렬에서는 nrow 또는 ncol을 이용하여 행 또는열의 수를 지정했습니다. 배열에서는 각 차원에 나열될 줄 수를 정의해야합니다. 1. array 함수로 벡터 정의 먼저 배열을 이용하여 벡터를 정의하는 것으로 시작합시다. 원소가 4개인 벡터를 정의하겠습니다. > v1=array(c(1,2,3),dim=c(3))> v1[1] 1 2 3 dim=c(3)은 1차원이고 줄 수가 3개라는 말입니다. 괄호 안에 있는 수의 개수가 차원이고, 수의 값이 줄 수 입니다. 방금 정의된 벡터는 열벡터일까요 행벡.. 2020. 1. 31.
R 행렬 인덱싱, 원소 추가/수정/제거 R 행렬 인덱싱, 원소 추가/수정/제거 1. 행렬의 인덱싱 행렬을 하나 정의합시다. > m1=matrix(c(1,2,3,4,5,6),nrow=2)> m1 [,1] [,2] [,3][1,] 1 3 5[2,] 2 4 6 인덱싱 원리는 벡터와 동일한데, 방향이 하나 추가된 것입니다. 행방향 index와 열방향 index가 있습니다. 아래와 같이 입력합니다. 행렬이름[행방향 index, 열방향 index] 1) 단일 원소 위 행렬의 1행2열 원소에 접근해봅시다. > m1[1,1][1] 1 1행 2열의 원소에 접근해봅시다. > m1[1,2][1] 3 2) 여러원소 벡터형태로 인덱스를 입력하면 됩니다. 1행의 2,3열의 원소에 접근해봅시다. > m1[1,c(2,3)][1] 3 5 아래와 같이 입력해도 됩니다. > .. 2020. 1. 30.
R 벡터의 인덱싱, 원소 추가/수정/제거 R 벡터의 인덱싱, 원소 추가/수정/제거 1. 인덱싱 벡터를 하나 정의합시다. > a=c(1,2,3,4,5)> a[1] 1 2 3 4 5 1) 단일원소 원소에 접근하는 방법은 대괄호 [ ] 를 이용하는 것입니다. 예를 들어 첫번째 원소에 접근한다면 아래와 같이 입력하면 됩니다. > a[1][1] 1 여기에 입력된 1을 index라고 합니다. 2) 범위 index를 구간으로 입력할 수도 있습니다. 1부터 3까지의 원소에 접근해봅시다. > a[1:3][1] 1 2 3 1:3이 마치 새로운 기호처럼 보이는데, c(1,2,3)인 벡터와 같습니다. 아래와 같이 입력해도 됩니다. > a[c(1,2,3)][1] 1 2 3 위 원리를 이용하여 1,3,5번째 원소에 접근해봅시다. > a[c(1,3,5)][1] 1 3 5.. 2020. 1. 29.
R에서 여러 요인(factor)들이 결합된 요인을 만들어주는 interaction 함수 R에서 여러 요인(factor)들이 결합된 요인을 만들어주는 interaction 함수 다섯 사람이 있다고 해봅시다. 다섯 사람의 성별과 혈액형은 아래와 같습니다. gender=factor(c('M','M','F','M','F'),levels=c('M','F'))b_type=factor(c('A','O','AB','B','A'),levels=c('A','O','AB','B')) interaction 함수를 적용해보겠습니다. > interaction(gender,b_type)[1] M.A M.O F.AB M.B F.A Levels: F.A M.A F.AB M.AB F.B M.B F.O M.O 위와 같이 두 요인이 결합된 요인을 반환해줍니다. level을 보면 두 요인의 level 조합으로 나올 수 있는 모.. 2020. 1. 18.
R에서 요인(factor)을 쉽게 정의할 수 있는 꿀함수 gl() R에서 요인(factor)을 쉽게 정의할 수 있는 꿀함수 gl() gl함수를 이용하면 요인을 간편하게 정의할 수 있습니다. 아래와 같이 사용합니다. gl(요인 수, 요인 별 반복 수, 전체 수, 요인 이름) 예를들어서 남자(M)와 여자(F)로 구성된 요인을 만들고 싶다고 해봅시다. M,M,M,F,F,F 를 만들고 싶다면, gl함수를 아래와 같이 사용하면 됩니다. > gl(2,3,labels=c("M","F"))[1] M M M F F FLevels: M F 이번에는 전체 수도 입력해봅시다. 10을 입력하면, MMMFFF 가 3개씩 입력되다가 10개가 되면 입력을 멈춥니다. > gl(2,3,10,labels=c("M","F")) [1] M M M F F F M M M FLevels: M F ordered .. 2020. 1. 18.
R 데이터프레임 열별 누락 데이터 개수 확인 R 데이터프레임 열별 누락 데이터 개수 확인 #데이터 정의 data1=c(1,2,3,NA,5) data2=c(NA,2,3,NA,5) data3=c(NA,NA,NA,4,5) #데이터 프레임 정의 my_df=data.frame(data1,data2,data3) > my_df data1 data2 data3 1 1 NA NA 2 2 2 NA 3 3 3 NA 4 NA NA 4 5 5 5 5 #apply 함수를 이용하여 누락데이터 수 계산 #sum 함수 안에 다시 is.na 함수를 적용한 것이라, 아래와 같은 형식 사용 apply(my_df,2,function(x) sum(is.na(x))) > apply(my_df,2,function(x) sum(is.na(x))) data1 data2 data3 1 2 3 2019. 12. 12.
반응형