R 프로그래밍 기초

2.1R데이터 타입 R에서 정수를 표현하는 데이터 타입은 크게 기본형(basic type)과 특수형(special type)으로 나뉜다.기본형은 숫자형(numeric), 복소수형(complex), 문자형(character), 일자형(date), 논리형(logical)이 있어 특수형은 NULL, NA, NaN, Inf가 있다.이들 각각의 내용과 형식은 표 2-1에 나타낸다.[표 2-1]R데이터 타입

구분 데이터 타입 내의 용기 책형 숫자형(numeric)계산이 가능한 것이고, 정수형과 실수형이 있는 복소수형(complex)실수와 허수로 구성된 수문 자형(character)알파벳, 특수 문자, 숫자 등의 조합 문자열로 “”또는””로 정리하고 표현 칼날형(date)년 월 일자 분초 등의 날짜형 논리형(logical)참(TRUE, T), 또는 허위(FALSE, F)을 의미하는 상징 상수(figurative constance)특수형 NULL, 알려지지 않은 값이 알려지면서혹은 아직 정해지지 않은 값을 의미하는 것으로 연산이 불가능 NANot Available의 약어로 흠측치(missing value)을 의미하는 것으로 연산이 불가능한 NaNot Available Number의 약어로 수학적으로 계산이 불가능한 수 InfInfinite의 약어로 양의 무한대를 의미하는 상징적인 값

2.2 R변수의 표현 R변수(variable)란 변화하는 정수 값을 저장할 수 있는 상징적인 이름(symbolic name)을 의미한다.R변수 이름을 명명하는 규칙은 다음과 같다.R변수 이름은 알파벳(alphabet), 숫자(number)_(Underscore).(period)로 구성할 수 있는 변수 이름의 첫 글자는 반드시 알파벳 또는.(period)에서 시작해야 할 변수 이름의 첫 글자를.(period)에서 시작하는 경우에는 다음 문자는 반드시 영자로 시작되는 알파벳 소문자는 구별되어 다른 변수 이름으로 사용할 수 있지만 땅 양 바른 변수 이름의 예:xya1a2.xscore_df score_df score.[표 2-2]R할당 연산자

할당 연산자의 내용<-혹은<-오른쪽에 있는 값을 왼쪽 변수에 저장 어디서나 사용->혹은->왼쪽에 있는 값을 오른쪽 변수에 저장 어디서나 사용=오른쪽에 있는 값을 왼쪽 변수에 저장 명령의 최상위 수준에서만 사용 파라메타 값을 지정하는 데 사용하는 경우는, 파라미터에 값이 할당되지 않는다

다른 언어에 비해서 R할당 연산자는 여러가지가 있으며 특히<-=연산자 사용법을 잘 알아 둘 필요가 있다.<-연산자는 변수에 값을 할당하는 경우에 어디서나 사용 가능하지만=는 명령의 최상위 수준에서만 사용 가능하다는 차이가 있다.즉=연산자는 함수의 인자(argument)값을 지정하는 데 사용하는 경우에는 인자에 값이 할당되지 않는다는 차이가 있다.이런 차이를 알아보려고 다음과 같은 R스크립트를 보자.

R할당문<-=의 차이 예의>a<-c(1,2,3)#변수a에 1 2 3보존>a#변수 a값 출력[1]1 2 3>mean(b<-c(1,2,3)#변수 b에 12 3보존 후 평균 갑 반환[1]2>b#변수 b값 출력[1]1 2 3>mean(x=c(1,2,3)#인자x에 1 2 3설정[1]x#변수x값 출력 Eror:object’x’noture:foundject’not상기 예에서 mean()함수 인자로서 b<-c(1,2,3)을 사용할 경우 변수 b에 12,3보존 후 평균치를 돌려주는 x=c(1,2,3)를 사용하면 인자 x에 13설정한 결과 평균치를 갚지만 변수 x에 값을 할당하지 않기 때문”Error:object’x’not found”메시지가 출력된 것이다.R변수는 데이터 분석으로 사용됨으로써 그림과 같이 여러가지로 불리게 된다.그림 2-1변수로 데이터형 분류 R의 기본 변수는 크게 불연속 변수(discrete variable)과 연속 변수(continuous variable)으로 나뉜다.불연속 변수는 명목 변수(nominal variable)와 서열 변수(ordinal variable)로 나눌 수 있고, 연속 변수는 등간 변수(interval variable)와 비율 변수(ratio variable)로 분류된다.이들 각각의 차이는 표 2-3과 같다.[표 2-3]R기본 변수의 종류그림 2-1 변수와 데이터형 분류 R의 기본 변수는 크게 이산 변수(discrete variable)와 연속 변수(continuous variable)로 나뉜다. 이산변수는 명목변수(nominal variable)와 서열변수(ordinal variable)로 나눌 수 있으며, 연속변수는 등간변수(interval variable)와 비율변수(ratio variable)로 분류할 수 있다. 이들 각각의 차이는 표2-3과 같다. [표2-3] R 기본변수의 종류한편 R데이터 분석의 측면에서 변수를 나누면, 분석 변수(analysis variable)와 회귀 변수(regression variable)으로 나뉜다.분석 변수는 요약 변수(summary variable)와 파생 변수(derived variable)fh로 나눌 수 있다, 회귀 변수(regression variable)은 독립 변수(independent variable)와 종속 변수(dependent variable)으로 나뉜다.이들 각각의 용도와 예는 표 2-4에 나타낸다.[표 2-4]R분석 변수구분 분석 변수 내용 분석 변수(Analysis variable)기본 변수(Basic variable)데이터의 기본 값을 보존하기 위한 변수이며, 혈액형, 성별, 온도, 점수, 키, 체중, 거리 등이 설계 변수(Designed variable)분석 처리를 쉽게 식별하고 분류하기 때문에 기본 변수 이외에 추가적으로 생성되는 변수로 학번, 회원 번호, 자동 차번호 등 파생 변수(Derive dvariable)다른 변수에서 파생된 변수이다.예를 들면 생년월일은 연월일로 요약된 기본 값을 가지고 있습니다.평균 등 회귀 변수(Regression variable)독립 변수(Independent variable)한 결과에 원인(입력)으로 작용하는 값을 가진 변수 종속 변수(Dependent variable)원인으로부터 얻은 결과(출력)값을 가진 변수그림 2-2는 R변수의 쓰임새 예이다.그림 2-2 R변수 사례도 2-3에서 설계 변수(designed variable)은 업무를 쉽게 식별하고 분류하고 처리하기 위해서 기본 변수 이외에 추가적으로 생성할 변수에서 회원 번호 상품 번호 등이 이에 해당된다.독립 변수와 종속 변수의 관계는 인과응보(retribution)에서 원인과 결과로 설명할 수 있다.예를 들면”구름이 많이 걸리고 있어 번개와 천둥이 울리면 곧바로 비가 내린다.”는 명제(proposition)이 있을 때”구름이 많이 걸리고 있어 번개와 천둥이 울리면”는 원인에 해당하는 “비가 내린다”라는 결론에 해당한다.이런 결과에서 우산을 가지고 외출하는 것이 현명할 것이라는 인사이트의 결정을 내린다.진료 번호 항목은 건강 데이터를 분석하기 위해서 추가적으로 추가한 항목에서 주로 고유치(unique value)에서 코드화된 값이 저장되어 각각의 레코드를 고유하게 식별하기 위한 용도로 사용된다.성별과 혈액형, 흡연 여부는 항목은 측정하거나 관찰하고 얻은 명목치에서 주로 분류나 그룹별 집계에 사용된다.생년월일과 검진 날짜 항목은 복수의 기본 데이터에서 파생된 값으로 분류 및 집계에 사용된다.몸무게, 키, 고혈압 항목은 측정되거나 관찰하고 얻은 기본 데이터에서 조회나 다른 값을 집계와 요약하는 데 사용된다.체질량 지수(BMI:Body Mess Index), 비만도는 기본 값으로 계산된 집계된 결과 값이다.이처럼 효과적인 데이터 분석을 위해서는 데이터의 구조와 속성을 잘 파악하는 것이 중요하다.우리는 컴퓨터와 인터넷을 기반으로 생성되는 정보와 지식을 기반으로 한 제3차 산업 혁명 시대를 거치면서 제4차 산업 혁명에 시대를 살고 있다.제4차 산업 혁명은 빅 데이터(Big Data)을 중심으로 인공 지능, 사물 인터넷, 모바일 등 첨단 정보 통신 기술이 융합하고 산업 전반에 혁신적인 변화를 이루는 사회를 의미한다.이와 같이 제4차 산업 혁명 시대의 핵심 동력인 빅 데이터에 대한 관심에서 데이터에 대한 중요성을 강조하는 사회적 분위기가 높아지고 있다.이런 사회에서 우리는 데이터를 읽고 그 속에 감추어진 의미를 파악할 능력이 무엇보다 중요하다.이런 데이터 해독 능력을 데이터 활용 능력으로 알려졌다.데이터 활용 능력은 데이터를 수집·기획·분석 처리하고 결과를 도출하는 시각화하는 기술뿐만 아니라 데이터에 숨겨진 의미를 통해서 인 사이트(insight)을 이끌어 내는 등 전반적인 데이터 활용에 필요한 역량을 포함한 개념이다.2.3R데이터 구조의 종류 다양하고 복잡한 데이터를 효과적으로 분석하려면 데이터를 어떻게 표현할 것으로 분석 결과가 다를 것이다.R은 빅 데이터를 효과적으로 분석할 수 있도록 표 2-5처럼 다양한 형태로 데이터를 표현할 수 있는 자료 구조를 갖고 있다.[표 2-5]R자료 구조의 종류데이터 구조 종류 설명 스칼라 단일 차원의 값 벡터 동일 유형의 데이터 타입을 가진 1차원 데이터 구조 인자 카테고리의 데이터 타입과 같은 길이를 가진 1차원 데이터 구조 행렬(array)(1)스칼라(scalar)스칼라 데이터 구조는 단일 차원의 값을 저장할 수 있는 데이터 구조이다.그러나 R에서 데이터 구조의 기본은 벡터(vector)이므로 스칼라는 길이가 1의 특별한 벡터이다.그림 2-3스칼라 데이터 구조 스칼라 데이터 구조에는 점수, 나이, 온도, 습도, 조도, 압력, 길이, 크기, 무게 등 단일 스칼라 값을 저장할 수 있다.스칼라 데이터 표현의 예를 표 2-6에 나타낸다.[표 2-6]스칼라 데이터 표현의 예예제(examples)설명문(comments)① a=10스칼라 변수 a에 10저장 ② b<-20스칼라 변수 b에 20저장 ③ 20L->c스칼라 변수 c로 정수 20저장 ④ d<-NA;e<-NULL스칼라 변수 d에 NA(Not Available), e에 NULL값 저장 ⑤ F<-FALSE스칼라 변수 f에 FALSE(거짓)보존 ⑥ g<-“Hello R”을 보존여기서 NA는 흠측치(missing value), 즉 분명히 값이 없으면 안 되는데 어떤 이유인 값이 빠지고 있는 경우 실수로 값을 입력하지 않은 경우나 값을 어떠한 이유로 측정하거나 관찰할 수 없었던 경우와 해당 항목에 적당한 값이 없어서 입력하지 않은 경우이다.한편 NULL결정되지 않은 값(undefined value)을 의미한다.데이터 분석으로 NA는 값을 찾고 입력하거나 보정하고 처리해야 하며 NULL은 처리하는 것이 보통이다.(2)벡터(vector)벡터는 R의 기본 자료 구조에서 하나의 스칼라 데이터 형식의 복수의 값을 결합하고 보존할 수 있는 것으로 다른 프로그래밍 언어에서 흔히 접하는 서열과 같은 형식을 갖는다.그림 2-4벡터 데이터 구조 방향은, 벡터치의 일부를 다룰 수 슬라이스(Slice)기능을 제공하거나 벡터 각 요소(element)에 이름을 부여할 수도 있다.벡터 데이터 구조를c:벡터 생성 형식(c는 “결합하는 “이라는 combine의 약자)c(···#벡터를 구성하는 동일한 데이터 타입의 값 리턴 값은 Vector벡터 데이터 표현의 예를 표 2-6에 나타낸다.[표 2-7]벡터 데이터 표현의 예예제(examples)설명문(comments)① x<-c(162,168,165,174)벡터 변수 x에 복수의 숫자 데이터 보존 ② y<-c(a<-c(62,80), b=c(45,74)벡터 변수 y에 벡터 a와 벡터 b을 저장 ③ z<-c(“여자”,”남자”,”남자”)벡터 변수 z에 여러 문자 데이터 보존 ④ xyz<-c(x, y, z)벡터치 x, y, z>벡터치 xk5이렇게 표현된 벡터의 각 요소(element)에 이름을 부여할 수 있다.벡터 요소에 이름을 붙이는 형식은 다음과 같다.names:벡터 각 요소에 이름을 붙인 형식names(x#이름을 붙인 대상 변수)<-c(…)#보존하는 이름의 반환 값은 문자열 Vector, 혹은다음은 벡터 각 요소(element)이름을 붙이는 예이다.벡터 요소에 이름을 붙인 사례>x<-c(162,168,165,174)#x에 벡터 값을 보존>x#벡터 변수 x에 저장된 값 출력[1]162 168 165 174>names(x)#벡터 변수 x의 이름 출력 NULL>names(x)<-c(“Kim”,”Lee”,”Park”,”Choi”)#벡터 변수 x의 이름을 보존>names(x)#벡터 변수 x의 이름을 출력[1]”Kim””Lee””Parki x>처음에 벡터를 생성하면 벡터 각 요소(element)에 이름은 부여되지 않고 NULL이 된다.names()함수를 통해서 각 요소에 이름을 부여할 수 있다.벡터에 이름을 붙이는 목적은 주로 벡터의 각 요소를 이름으로 찾기 위해서이다.앞으로 벡터치를 자동으로 생성하는 함수는 seq로 rep이 있다.seq함수는 연속한 숫자로 구성된 벡터를 생성할 때 사용하고 rep은 반복된 숫자로 벡터를 생성할 경우에 사용한다.우선 seq함수를 이용하여 연속한 숫자 벡터를 생성하는 형식은 다음과 같다.seq:시퀀스(sequence)함수 seq(from,#시작 값 to,#종료치 by#증가치)from에서 to까지의 값을 by간격으로 숫자 벡터치를 갚았다그럼 seq함수를 이용하여 다음과 같은 연속한 숫자 벡터를 생성하는 사례를 보자.예제(examples)설명문(comments)① seq(from=2, to=10)②에서 10까지의 자연수로 구성된 벡터 생성 ② seq(10, 2)10에서 2까지의 자연수로 구성된 벡터 생성 ③(x<-seq(from=2, to=10, by=2)x에 2에서 10까지 2씩 증가한 벡터 보존 ④ 1:NROW(x)1에서 벡터 변수 x의 개수까지 벡터 생성 ⑤ seq_along(c”a”,”,”3명의 인자에… 그렇긴n의 벡터 생성 ⑥ seq_len(5)1부터 5까지 연속한 자연수 생성 ⑦ 2:102에서 10까지 자연수로 구성된 벡터 생성seq 예를 R로 실행한 결과는 다음과 같다.seq함수를 이용한 연속 벡터 생성>seq(from=2, to=10)#2에서 10까지 연속한 자연수 생성[1]2 3 4 5 6 78 9 10>seq(10, 2)#10에서2까지 자연수 생성[1]10 9 8 7 6 5 4 32(x<-seq(from=2, to=10, by=2)#2에서 10까지 2씩 증가한 벡터x에 저장[1]2 4 6 8 10>1:NROW(x)#1벡터의 1에서 5,”c”)#인자의 개수만12 3벡터 생성[1]1 2 3>seq_len(5)#1부터 5까지 연속한 자연수 생성[1]1 2 3 4 5>2:10#2에서 10까지 자연수로 구성된 벡터 생성[1]2 3 4 5 6 78 9 10다음은 rep 함수를 이용한 반복 벡터를 생성하는 형식이다.rep: 주어진 값을 반복(repeat) 하는 벡터 생성 rep(x,#반복 값이 저장된 벡터 times#모든 벡터의 반복 횟수 each#개별 값의 반복 횟수)반려치는 반복된 값이 저장된 x와 같은 종류의 객체그럼 rep함수를 이용하여 다음과 같은 반복 벡터를 생성하는 사례를 보자.예제(examples)설명문(comments)① rep(1:2, times=5)벡터 12를 5회 생성.1 2 1 2 1 2 1 2 2 rep(1:2, each=5)벡터 12를 각각 5회 생성.1 1 1 12 2 3rep(1:2, each=5, times=2)벡터 12를 각각 5회씩 생성하고 총 2회 반복 생성rep 함수 사용 예를 R로 실행한 결과는 다음과 같다.rep함수를 이용한 반복 벡터 생성>rep(1:2, times=5)#벡터 12를 5회 생성[1]1 2 1 2 1 2 2>rep(1:2, each=5)#벡터 12를 각각 5회 생성[1]1 1 1 2 2>rep(1:2, each=5, times=2)#벡터 12를 각각 5회씩 2회씩 반복하는 생성[1]1 1 12 2 2 2 0 0 3 4 0.0.1다음 표는 생성된 벡터에 있는 요소를 접근하는 다양한 형식이다.[표 2-6]벡터에 접속하는 형식형식 의미 x[n]벡터 x의 n번째 요소를 갚겠습니다.N은 숫자 또는 셀 이름을 의미하는 문자열 x[-n]벡터 x의 n번째 요소를 제외하고 갚겠습니다.N은 숫자 또는 셀 이름을 의미하는 문자열 x[index]벡터 x의 index에 해당하는 요로를 갚겠습니다.Index는 색인을 표현하는 숫자 또는 셀에 이름에 해당하는 문자열 x[start:end]벡터 x의 start에서 end까지 값을 갚겠습니다그럼 다음과 같이 벡터에 있는 요소를 접근하는 사례를 보자.벡터에 있는 요소를 접근하는 사례>x<-c(162,168,165,174)#벡터 변수 x에 값 할당>names(x)<-c(“Kim”,”Lee”,”Park”,”Choi”)#벡터 변수 x에 이름자>x[3]#벡터 변수 x에 3번째 요소치 출력 Park 165>x[-3]#벡터 변수 x에 3번째 요소를 제외하고 출력 Kim Lee Choi 168 174>x[2:3]#벡터 변수[2:3]#벡터 변수, 4번째 요소 값을 출력 Lee Choi 168 174>x[“Lee”]#벡터 변수 x에 “Lee”에 해당하는 요소치 출력 Lee 168벡터는 복수의 동일한 데이터 형식의 데이터를 가지고 있는 데이터 구조에서 다음과 같은 형식의 연산을 제공한다.우선 R에서 사용하는 수치 계산 연산자를 보면 다음 표와 같이 된다.[표 2-7]수치 연산자연산자 중 예제+-*/상태죠제사칙 연산 5+2=7,5-2=3,5*2=10,5/2=2.5^또는**곱하기 5^2=25,5**2=25%/% 나누분 반환 5%/%2=2% 나눈 나머지 반환 5%2=1pi원주율 파이 값 반환 pi=3.141593sqrt(n)제곱 근 sqrt(2)=1.414214exp(n)지수 56xp(n)base), , log10(2)=0.30103sin(n)cos(n)tan(n)sine함수 cosine함수 tangent함수 sin(0)=0, sing(90)=0.8939967cos(0)=1, cos(90)=-0.4480736tan(0)=0, tan(90)=-1.9952벡터 데이터 수치 연산 예는 다음 표와 같다.벡터 데이터 수치 연산 사례>x<-1:5#벡터 변수 x에 12 3 4 5저장>y<-6:10#벡터 변수 x에 67 8 9 10저장>x+2#벡터 변수 x가 각 요소에 2씩 더해[1]345 67>x+y#벡터 변수 x+y[1]7 9 11 13 15>y-x#벡터 변수 y-x[1]55>x*2#벡터 변수 x가 각 요소에 2씩 부가[1]24 8 10>x/1#벡터 변수x가 각 요소에 2씩 나눈 결과 나머지 출력[1]10 1>r<-seq(from=2, to=6, by=2)#벡터 변수r에 24 6보존>2*pi*r^2#원의 면적 계산[1]25.13274 100.53096 226.19467>birthday<-as.Date(“2000-01-01”)#날짜 형식의 생년월일 보존>(t<-as.numeric(Sys.Date()-birthday)#현재 시스템 날짜부터 생년월일까지의 날수 계산[1]8265(s<-c(23,28,33)#신체 23, 감성 28지성 33주기[1]232833>sin(2*pi*t/s)#생체 리듬 출력[1]0.816699 0.90096817326R에서 사용하는 비교 연산자는 다음 표와 같다.[표 2-8]비교 연산자연산자의 미 례제<= 작고 작은 마찬가지, 5<2=FALSE, 5<=2=FALSE>>=크기, 크고 근 5>2=TRUE, 5>=2==TRUE= 같은 5=2=FALSE!== 같지 않다5!=2=TRUER 비교 연산자는 사용 예는 다음 표와 같다.R비교 연산자는 사용 사례>x<-c(1,2,3,4,5)#벡터 변수 x에 값을 보존>y<-c(0,2,1,4,3)#벡터 변수 y에 값을 보존>x<y#벡터 x원소 각각 원소가 y의 전 처음부터 작을 경우 TRUE[1]FALSE FALSE FALSE>x>y#벡터 x원소 각각이 y의 전 처음부터 큰 경우 TRUE FALSE TRUE>x매개체 토프와 같다면 TRUE[1]!=y#벡터 x원소 각각이 y의 원소 같지 않으면 TRUE[1]TRUE FALSE TRUE FALSE TRUER에서 사용하는 논리 연산자는 다음 표와 같다.[표 2-9]논리 연산자연산자 중 예제|논리합 TRUE| FALSE=TRUE&논리곱 TRUE&FALSE=FALSE!논리 부정!TRUE=FALSE isTRUE(x)진위여부 X<-TRUE;isTRUE(x)TRUER논리 연산자는 사용 예는 다음 표와 같다.논리 연산자는 사용 사례>x<-c(FALSE, FALSE, TRUE, TRUE)#벡터 변수x에 논리 값을 보존>y<-c(FALSE, TRUE, FALSE, TRUE)#벡터 변수 y에 논리 값을 보존>x| y#벡터 x와 y의 논리합[1]FALSE TRUE TRUE>x&y#벡터 x와 y의 논리곱[1]FALSE FALSE TRUE>[1]TRUE FALSE RUELSURE FALSE FALSE is is_진위의 비리R에서 사용하는 집합 연산자는 다음 표와 같다.[표 2-10]집합 연산자형식 중 identical(x, y)벡터 x, y의 요소가 서로 동일한지 판단.동일하면 TRUE, 아니면 FALSE을 반환 union(x, y)벡터 x, y의 요소의 합집합한 결과를 반환 intersect(x, y)벡터 x, y의 요소의 교집합한 결과를 반환 setdiff(x, y)벡터 x, y의 요소가 같은 집합인지 판단한다.동일하면 TRUE, 아니면 FALSE을 반환 value%in%x벡터 x에 value가 저장되어 있는지를 검사하고 있으면 TRUE을 반환R집합 연산자는 사용 예는 다음 표와 같다.집합 연산자는 사용 사례>x<-c(“a”,”b”,”c”)#벡터 변수 x의 값 저장>y<-c(“a”,”c”,”d”)#벡터 변수 y의 값 저장>identical(x, y)#벡터치 x와 y가 같나?[1]FALSE>union(x, y)#벡터치 x와 y의 합집합[1]”a”b”c”d”>intersect(x, y)#벡터치 x와 y의 교집합[1]”a”c”>setdiff(x, y)#벡터치 x와 y의 다음 집합[1]”b”>setequal(x, y)#벡터치 x와 y가 동일한 집합인지 가려내[1]FALSE>”b”%in%x#벡터치 b TRUE(3)변수 변수, 변수는 주로 카테고리형 데이터를 표현하기 위한 데이터 형식으로, 미리 정해진 특정 타입으로 분류되는 경우에 사용한다.범주형 데이터는 명목형(Nominal)과 순서형(Ordinal)로 요약된다.후에크타ー을 생성하는 형식은 다음과 같다.factor:변수 값을 생성 factor(x,#팩터로 표현하는 값(주로 문자열에서 지정)levels,#값 차원(값의 종류 및 범위)ordered#TRUE로 지정하면 순서형, FALES면 명목형 데이터(기본 값)반환 값은 Vector다음은 명목형(nominal)factor를 생성하는 예이다.Nominal factor생성 사례>gender<-factor(c(“남자”여자”여자”여자”남자”)+levels=c(“남자”여자”)#gender에 변수 값을 보존>gender[1]남녀 남자 여자>nlevels(gender)[1]2>levels(gender)[1]”남자”여자”>as.numeric(gender)[1]1 2 1다음은 순서형(ordinal)factor를 생성하는 예이다.순서 계수 성제생>그레이드<-factor(c(“B”,”B”,”A”,”C”,”A”),+수준=c(“B”,”C”,”D”),+ordered=TRUE)#그레이드순 형서성 factor이미지>grade[1]B A C ALevels:A<B.C<D>차원(등급)[1]”A””B””C””D”>as.numeric(등급)[1]2 2 1 3 1(4)리스트(list)목록 데이터 구조에는 복수의 형태의 데이터를(키 값)형태의 관련된 배열 형태에 한꺼번에 저장할 수 있다.그림 2-5리스트 데이터 구조의 다음은 리스트 생성 형식이다.list리스트 오브젝트 생성 형식 list(key1=value1,#리스트 키와 값 key2=value2,#리스트 키와 값…)반환 값은 key1에 value1, key2에 value2등을 저장한 리스트리스트의 요소(element)에 접속하는 형식은 다음과 같다.[표 2-11]목록 접근 형식형식 의미 x$key리스트 x에서 키에 해당하는 값을 반환 x[n]리스토 x에서 n번째(key, value)서브 명단을 반납 x[n]리스토 x에서 n번째 값을 갚겠습니다그러면 목록을 생성하고 요소에 접근하는 사례를 보자.다음은 복수의 형태의 데이터를 하나의 목록으로 구성하는 예이다.명단 작성 및 접속 사례>(x1<-list(name=”홍길동”, age=22, gender=”남”)#x1리스트 생성$name[1]”홍길동”$age[1]22$gender[1]”남”>x1[2]#리스트 x1에서 2번째 key와 value출력$age[1]22>x1[[2]#리스트 x1에서 2번째 value출력[1]x 1$name#리스토 x1부터 name키에 해당하는 “다음은 1개의 키에 여러개의 벡터치를 가진 경우 목록 생성 및 접속 사례이다.1개에 key에 여러개의 벡터치를 가진 경우 목록 생성 및 접속 사례>(x2<-list(name=”이, 스이 르”, friends=c(“홍길동”,”이상한 “,”심·순애”)#리스트x2생성$name[1]”이·수위 르”$friends[1]”홍길동”이상하다””심·순애”>x2[2]#리스트 x2의 2번째 key, value출력$friends[1]”홍·길 동해”(5)행렬(matrix)동일 타입의 데이터를 m×n행(row)과 열(column)형태의 테이블에서 표현하는 경우에 사용한다.그림 2-6행렬 데이터 구조 행렬을 생성하는 형식은 다음과 같다.matrix:행렬 생성 matrix(data,#행렬을 생성하는 벡터형 데이터 nrow,#행 수 ncol,#줄 수 byrow=FALSE,#줄을 최우선으로 행렬을 생성(TRUE행 우선 행렬)dimnames=NULL#행렬 각 차원에 부여하는 이름)반환 값은 행렬matrix : 행렬생성 matrix(data, #행렬을 생성하는 벡터형 데이터 nrow, #행수 ncol, #열수 byrow=FALSE, #열우선행렬) dimnames=NULL #행렬각 차원에 부여하는 이름)반납값은 행렬행렬의 생성과 접속 사례1>(x<-matrix(1:6, nrow=3)#줄 우선 3*2행렬의 생성[, 1][, 2][1,14[2,25[3,36>rownames(x)<-c(“1줄”,”2줄”,”3개”)# 가이름>colnames(x)<-c(“1번째”,”2번째”)#열의 이름자>x#행렬 x출력 1번째 42열의 값을 42개 출력 1줄 2열 1개 142행 253개 36>x[-2,]#행렬 x이고 2곳을 제외하고 출력 1줄 2열 1개 143개 36>x[c(1,3), 2]#행렬 x에서 1,3곳과 2줄을 출력 1행 3개 46행렬의 생성과 접속 사례1>(x<-matrix(1:6, nrow=3)#줄 우선 3*2행렬의 생성[, 1][, 2][1,14[2,25[3,36>rownames(x)<-c(“1줄”,”2줄”,”3개”)# 가이름>colnames(x)<-c(“1번째”,”2번째”)#열의 이름자>x#행렬 x출력 1번째 42열의 값을 42개 출력 1줄 2열 1개 142행 253개 36>x[-2,]#행렬 x이고 2곳을 제외하고 출력 1줄 2열 1개 143개 36>x[c(1,3), 2]#행렬 x에서 1,3곳과 2줄을 출력 1행 3개 46행렬의 생성과 연산 사례 2>(y<-matrix(1:4, ncol=2, byrow=TRUE,#행 우선 2*2행렬의 생성+dimnames=list(c(“1줄”,”2줄”), c(“1열”,”2열”)1줄 2열 1개 122곳 34>dim(y);nrow(y);ncol(y)#y행렬 차원, 줄의 수, 줄 수 출력[1]2[1]2[1]2번째*1번째 줄에 곱한 결과*2출력 1개 2개1열 132줄 24>solve(y)#y행렬의 역행렬 출력 1개 2개1줄-2.01.02열 1.5-0.5>y%*%solve(y)#y행렬 단위 행렬 출력 1개 2개 1개 11.110223e-162줄 01.0000e+00(6)배열 순서(array)형은 행렬(matrix)데이터 구조와 같지만 주로 3차원 이상의 테이블을 표현하는 경우에 사용한다.배열을 생성하는 형식은 다음과 같다.array배열 생성 형식 array(data=NA,#배열 생성하는 벡터형 데이터 dim=length(data),#배열 차원, 이 값을 지정하지 않으면 1차원 배열이 생성 dimnames=NULL#배열 차원의 이름)반환 값은 배열배열을 생성하고 원소에 접근하는 예는 다음과 같다.배열 생성과 접속 사례>(x<-array(1:12, dim=c(2,3,2)#2행 3줄 2쪽x배열 생성1[, 1][, 2][, 3][1,1, 3 5[2,2 46, 2[, 1][, 2][, 3][1,7 911[2,810 12>dim(x)#x배열 차원 출력[1]x[2, 2, 0쪽x배열의 값>(7)데이터 프레임(data frame)매트릭스(matrix)과 유사한 2차원 테이블 구조에서 데이터 표현할 수 있지만 매트릭스 구조와 다른 것은 줄(column)별로 다른 데이터형(숫자, 문자, 논리형 등)을 표현할 수 있다.매트릭스 데이터 구조는 R데이터 구조에서 가장 많이 활용된다.그림 2-7데이터 프레임 데이터 구조 데이터 프레임 생성 형식은 다음과 같다.데이터. frame생성 형식 데이터. frame(data=NA,#데이터 프레임을 생성하는 벡터형 데이터 row.names=NULL,#data frame행의 이름자 check.rows=FALSE,#TRUE을 설정되면 각 행은 사이즈와 이름의 일관성 체크 check.names=TRUE,#데이터 프레임 변수 이름 점검 fix.empty.names=TRUE,#이름 없는 것은 자동적으로 부여 stringsAsFactors=default.stringsAsFactors()#문자형 줄을 factor에 변경 여부)반환 값은 데이터 프레임데이터 프레임을 생성하는 예는 다음과 같다.score데이터 프레임 생성과 행과 열 추가 사례>score<-data.frame(이름=c(“홍길동”,”한·송희”,”심·순애”)+성별=c(“남자”,”여자”)+국어=c(80, 90, 85)+영어=c(75, 95, 85)#score데이터 프레임 생성>score#score데이터 프레임 출력 성명 성별 국어 영어 1폰·길동 남자 80752한·송희 여자 90953심·승리 에 여자 85>score#score#carmindfora095 903심·순애 여자 85 80>score<-rbind(score, data.frame(이름=”의자 일”, 성별=”남자”, 국어=80, 영어=85, 수학=70)#행 추가>score#score데이터 프레임 출력 성명 성별 국어 영어 수학 1홍길동남자 8075 702한·송희여자 9095 903심·순애 여자 85 804이·수위 르 남자8085 70데이터 프레임의 연산 및 연산된 열 추가는 다음의 예와 같다.score데이터 프레임의 연산 및 연산된 열 추가>score#score데이터 프레임 출력 성명 성별 국어 영어 수학 1폰·길동 남 8075702한·송희 여자 9095903심·승리 에 여자 85804이수 날 남자 808570>(총점=score$국어+score$수학)#총점을 요구[1]225275250235>(평균=round(총점/3,2)#평균을 구해[1]75.0091.6783.3.33k(평균 자리-33783.8602석)(평균)결합>score#score데이터 프레임 출력 성명 성별 국어 영어 수학 총점 평균 석차 1폰·길동 남 80757022575.0042한·송희 여자 90959027591.6713심·승리 에 여자 858025083.3324이수 날 남자 80857023578.333다음은 데이터 프레임으로 열과 행을 조회하는 예이다.이하는 데이터 프레임에서 열과 행을 조회하는 예이다.(8)데이터 테이블(data table)데이터 테이블(data table)는 data.frame과 같지만, 메모리 효율성과 데이터 검색 속도를 빠르게 하기 때문에 사용한다.데이터 테이블을 생성하는 형식은 다음과 같다.데이터. table:데이터. table생성 형식 data.table(data=NA,#데이터 테이블을 생성하는 벡터형 데이터 row.names=NULL,#데이터 테이블행 이름자 check.rows=FALSE,#TRUE설정되면 각 행은 사이즈와 이름의 일관성 체크 check.names=TRUE,#데이터 테이블 변수 이름 점검 fix.empty.names=TRUE,#이름 없는 것은 자동적으로 부여 stringsAsFactors=default.stringsAsFactors()#문자열 factor에 변경 여부)반환 값은 데이터 테이블데이터 테이블 생성 예는 다음과 같다.data.table생성>install.data.table”)URL’https://cran.rstudio.com/bin/windows/contrib/4.1/data.table_1.14.2.zip’Content type’application/zip’length 2600338 byte(2.5 MB)다운로드했다2.5 MB패키지’data.table’의 언팩에 성공하고 MD5의 합계가 체크되어 있습니다 다운로드된 바이너리 패키지는 C에 있습니다:\사용자\choi의 AppData\Local\4개의 스레드를 사용하여 Temp\RtmpCAlgR1\downloaded_packages>library(data.table)data.table 1.14.2를 일시적으로 사용합니다(“?getDTthreads”를 참조).최신 뉴스:r-datatable.com경고 메시지:패키지’data.table’는 R버전4.1.3에서 작성되었습니다>id<-c(1, 2, 3)>name<-c(“홍길동”,”이수일”,”심순애”)>age<-c(21, 22, 20)>(dt<-data.table(id, name, age)#dt데이터테이블 생성 id name age1:1홍길동 212:2이수일 223:3심순애 20>setkey(dt, id)#dt데이터테이블 id열키 생성>key(dt)#dt데이터테이블 키 조회[1]”id”>dt[dt$id==2,#dt에서키열 id를기지고 행 조회id name age1:2이수일 22(7)데이터 타입 판별 함수 R데이터 타입을 판별하는 함수는 다음 표와 같습니다.[표 2-12]데이터 타입 판별 함수함수(function)의미 class(x)객체x의 데이터형 조회 str(x)객체x의 내부 구조(structure)is.numeric(x)객체 x가 numeric형인지 판별 is.character(x)객체 x가 character형인지 판별 is.factor(x)객체x가 factor형인지 판별 is.matrix(x)객체x가 matrix형인지 판별 is.array(x)객체x가 array형인지 판별 is.data.frame(x)객체x가 data.frame형인지를 판별다음은 데이터 타입 판별 함수를 사용한 예이다.이하는 데이터 타입 판별 함수를 사용한 예이다.(8)데이터형 변환 함수 R데이터형을 변환하는 함수는 다음 표와 같다.[표 2-13]데이터형 변환 함수함수(function)의미 as.numeric(x)x를 numeric으로 변환 as.character(x)x를 character로 변환 as.factor(x)x를 factor로 변환 as.matrix(x)x를 matrix로 변환 as.arrary(x)x를 arrary에 변환 as.data.frame(x)x를 data.frame으로 변환이하는 데이터형을 변환하는 함수를 사용한 예이다.데이터 타입 판별 함수를 사용한 사례>health<-data.frame(name=c(“홍길동”,”한·송희”,”이·수위 르”),+gender=c(‘M’,’M’)+weight=c(65, 60, 70)+height=c(168, 164, 172)>class(health)#health데이터형 조회[1]”data.frame”>health<-as.table(health)형 데이터형 데이터 변환.character(health$gender)#health의 gender열문자?[1][1]TRUE>is.factor(health$gender)#health의 gender열팩터터?[1][1]FALSE(health$gender<-as.factor(health$gender)#health의 gender열팩터 변환[1]M F MLevels:F M>(health$gender<-as.numeric(health$gender)#health의 gender렬수 글씨 변환[1]2 1 22.7R제어문 R은 일종의 프로그램 언어이다.그러므로 R도 다른 범용 언어처럼 프로그램 논리적 흐름을 제어하는 구문이 있다.R프로그램은 일반적으로 기술된 순서로 해석되고 실행되는 순차적으로 구조에 따르지만 반복되는 R프로그램의 간결성 때문에 for, while, repeat반복문을 사용할 수 있다.그림 2-8R제어문부터 먼저 for반복 문장의 형식은 다음과 같다.for (i in data) {반복하는 문장}for중첩문은 데이터에 포함된 각각의 값을 변수 i에 할당하면서 블록 내 문장을 반복 수행한다.for중첩문을 적용한 R프로그램 사례는 다음과 같다.for중첩 문을 적용한 프로그램 사례>#1에서 100까지 합계>sum<-0>for(i in 1:100){#for중첩 문, i가 1~100까지 반복+sum<-sum+i+}>sum[1]5050다음은 while 반복문의 형식이다.while(조건) {반복하는 문장}while반복 문장은 조건이 진정 될 때까지 블록 내 문장을 반복하여 수행한다.while반목문을 적용한 R프로그램 사례는 다음과 같다.while반목문을 적용한 프로그램 사례>#1에서 100까지 총 수>x=0;sum=0>while(x<100){+x<-x+1+sum<-sum+x+}>print(sum)[1]5050마지막으로 다음은 repeat반복 문장의 형식이다.repeat{반복하는 문장}repeat반복 문장은 블록 내 문장을 무조건 계속 수행한다.반복을 종료하려면 break문, next문을 사용해야 한다.반복 수행 중에 break문에 만나면 반복에서 탈피하다.그러나 next문은 중복 블록에서 사용하는 것으로 next문에 만나면 현재 수행 중인 블록의 반복을 중단하고 다음 반복을 시작한다.repeat반복문을 적용한 R프로그램 사례는 다음과 같다.repeat반복 문을 적용한 프로그램 사례>#1에서 100까지 총 수>x=0;sum=0>repeat<+x<-x+1+sum<-sum+x+if(x==100)break+}>print(sum)[1]50502.8 R조건문 R조건문은 R프로그램 논리의 흐름을 선택적으로 하는 경우에 사용하는 구문이다.그림 2-9 R조건문 R에서 사용하는 조건 문장의 형식은 다음과 같다.if(조건){#조건이 진정한 때 하는 구문}else{#조건이 거짓의 경우에 하는 구문}R의 조건 문은 if함수로 시작하지만, if조건이 참이면 if절의 다음 블록을 수행하고 거짓말이라면 else다음 블록을 수행한다.R에서 if문은 if~else구문과 ifelse구문을 많이 사용한다.우선 if~else구문을 사용한 예는 다음과 같다.if~else를 적용한 프로그램 사례>#20미만의 값의 개수를 요구하는>x<-c(33,18,24,12,19,28,10,32,20,30)>y<-rep(0, length(x)>for(in 1:length(x){+if(x[i]<20){+y[i]<-1+}else{+y[i]<-0+}+print(y)[1]0/1]0/0/4 0/0#1um다음은 ifelse함수를 적용한 예이다.ifelse함수를 적용한 프로그램 사례>score<-data.frame(이름=c(“홍길동”,”한·송희”,”심·순애”이·수위 르”),+성별=c(“남자”,”여자”,”여자”),+국어=c(80, 90, 85, 85)+수학=c(70, 90, 70)>(총점=score$225$#수학의 합계][영어+score$225$225$ore, 총점 평균 석차)성명 성별 국어 영어 수학 총점 평균 석차 1폰·길동 남 80757022575.0042한·송희 여자 90959027591.6713심·승리 에 여자 858025083.3324이수 날 남자 80857023578.333>#ifelse함수를 적용한 단위 판정(단위=ifelse(score$평균>=90,”A”,+ifelse(score$평균)=80,”B”,+ifelse=core”,”(core”)국어 영어 수학 총점 평균 석차 단위 1폰·길동 남 80757022575.004C2한·송희 여자 90959027591.671A3심·승리 에 여자 858025083.332B4이·스일남 80857023578.333C2.9.2사용자 정의 함수, 그리고 검증된 함수는 신뢰할 수 있어 효율적인 코딩을 가능하게 한다.R함수를 정의하는 구문 형식은 다음과 같다.함수 이름<-function(인자 1, 인자_2,… 그렇긴){R처리 코드 return(결과치)}함수 이름은 R변수를 생성하는 규칙과 동일하다.그리고 function키워드 속으로 함수 호출 시에 건넨 데이터를 저장하는 인자를 기술한다.그리고 함수 블록에서 R처리 코드를 기술하고 처리된 결과를 함수를 호출한 것으로 갚느라 return다음에 반환 값을 기술한다.우선 R에서 함수를 정의한 간단한 프로그램을 보자.R함수 정의 예>addto<-function(x){+isum<-0+for(i in 1:x){+isum<-isum+i+}+return(isum)+}>addto(10)#1에서 10까지 일본[1]55>addto(100)#1에서 100까지 일본[1]5050이하는 생년월일의 입력을 받고 생체 리듬(biorhythm)을 요구하는 함수를 정의하고 활용한 예이다.R생체 리듬 함수 정의 예>#생체 리듬을 요구>biorhythm<-function(birthday){#함수 정의+birthday<-as.Date(birthday)+days<-round(as.numeric(difftime(Sys.Date(), birthday)+physical<-sin(2*pi*days/23)*100#신체23일 주기+emotional<-sin(2*pi*days/28)*100#감정28일 주기+intellectual<-sin(2*pi*days/33)*100#지성33일 주기+data<-data.frame(physical, emotional, intellectual)+return(data)+}>biorhythm(“2000-01-02”)#함수 호출 physical emotional intellectual1 94.22609 78.18315 45.82265>biorhythm(“2002-12-31”)#함수 호출 physical emotional intellectual1-99.76688 43.38837 98.982142.9R함수 R함수는 흔히 쓰이는 특정 기능을 수행하는 명령을 묶은 것으로 함수를 정의하고 프로그램하면 같은 루틴을 반복 코딩하지 말고 다시 이용할 수 있다.R언어는 인공 지능 언어 LISP(List Processor)의 영향을 받았기 때문에 기본적으로 함수 위주의 프로그램 언어(function-oriented programming language)이다.그러므로 R프로그램을 이해하는 것은 즉 R함수의 종류와 사용법을 이해해야 한다는 것이다.함수는 크게 내장 함수(built-in function)과 패키지 함수(package function), 그리고 사용자 정의 함수(user-defined function)로 구분된다.이번 절에서는 R프로그램에서 흔히 쓰이는 주요 함수의 종류와 사용법에 대해서 본다.2.9.1 R내장 함수 R내장 함수는 R가 시작될 때 표준 라이브러리에 등록됐으며 R프로그램 작성자가 패키지 설치하거나 사용자가 정의하지 않고 그대로 사용할 수 있는 함수이다.R내장 함수는 무수히 있지만 여기에서는 기초 통계량 함수, 문자 처리 함수, 날짜 처리 함수 분류 집계 함수를 설명할 것이다.(1)데이터 타입 판별 함수 R데이터 타입을 판별하는 함수는 다음 표와 같다.[표 2-12]데이터 타입 판별 함수함수(function)의미 class(x)객체x의 데이터형 조회 str(x)객체x의 내부 구조(structure)is.numeric(x)객체 x가 numeric형인지 판별 is.character(x)객체 x가 character형인지 판별 is.factor(x)객체x가 factor형인지 판별 is.matrix(x)객체x가 matrix형인지 판별 is.array(x)객체x가 array형인지 판별 is.data.frame(x)객체x가 data.frame형인지를 판별이하는 데이터 타입 판별 함수를 사용한 예이다.이하는 데이터 타입 판별 함수를 사용한 예이다.(2)데이터형 변환 함수 R데이터형을 변환하는 함수는 다음 표 2-13과 같다.[표 2-13]데이터형 변환 함수함수(function)의미 as.numeric(x)x를 numeric으로 변환 as.character(x)x를 character로 변환 as.factor(x)x를 factor로 변환 as.matrix(x)x를 matrix로 변환 as.arrary(x)x를 arrary에 변환 as.data.frame(x)x를 data.frame으로 변환다음은 데이터형을 변환하는 함수를 사용한 사례이다.데이터 타입 판별 함수를 사용한 사례>health<-data.frame(name=c(“홍길동”,”한·송희”,”이·수위 르”),+gender=c(‘M’,’M’)+weight=c(65, 60, 70)+height=c(168, 164, 172)>class(health)#health데이터형 조회[1]”data.frame”>health<-as.table(health)형 데이터형 데이터 변환.character(health$gender)#health의 gender열문자?[1][1]TRUE>is.factor(health$gender)#health의 gender열팩터터?[1][1]FALSE(health$gender<-as.factor(health$gender)#health의 gender열팩터 변환[1]M F MLevels:F M>(health$gender<-as.numeric(health$gender)#health의 gender렬수 글씨 변환[1]2 1 2(3)R기초 통계량 함수 R기초 통계량 함수는 R데이터 형식으로 데이터를 쉽게 집계하는 요약하고 빈도수, 합계 평균 및 표준 편차 등 기초 통계량을 요구할 수 있는 함수를 제공한다.R기초 통계량 함수는 다음 표 2-14과 같다.[표 2-14]R기초 통계량 함수함수(function)미시 length(x)벡터 x의이야 서울의 수를 갚을 min(x)벡터 x의 최소값 max(x)벡터 x의 최대치 fivenum(x)벡터 x의 5분위 수 quantile(x, prob=n)벡터 x의 n분위 수 sum(x)벡터x의 합계 mean(x, na.rm=TRUE, NA치를 제거하고 계산)median(x UE, 중위(na.rm=TRUE, TRUE, NA치를 제거하고 계산)median(x, TR, 최소, 최대분위 수, 평균 분산, 표준 편차 등)R기초 통계량 함수의 예는 다음과 같다.R기초 통계량 함수 사용 사례>(x<-1:10)#벡터 x에 1부터 10까지 자연수 보존[1]1 2 3 4 5 6 78 9 10>length(x)#벡터 x의 요소 수[1]10>min(x)#벡터 x의 최소치[1]1>max(x)#벡터 x의 최대치[1]10>fivenum(x)#벡터 x의 4분위 수[1]1.03.05.58.0>quantiles=tbs.01]5.5>var(x)#벡터x의 분산[1]9.166667>sd(x)#벡터x의 표준 편차[1]3.02765>summary(x)#벡터x의 종합 통계량 Min. 1st Qu.Median Mean 3rd Qu. Max. 1.00 3.25 5.50 5.50 7.75 10.00(4)R문자 처리 함수 R의 문자 처리 때문에 자주 함수는 다음 표 2-15과 같다.[표 2-15]R문자 처리 함수함수의 비 nchar(x)스칼라 변수 x에 문자 수를 반환(비교 length는 벡터의 원소의 수를 반환)substr(x, start, stop)문자형 벡터 x의 start에서 stop까지 반환 paste(x, y, sep=””)문자형 벡터 x와 y를 결합한 결과 반환 strsplit(x, split=”,”)문자형 벡터 x를 split기준으로 나눈 결과를 반환 sub(old, new, x)문자형 벡터x부터 newsub, x)문자열 벡터에서 특정 부분 문자열 패턴을 발견한 결과, 반환 regexpr(x)문자열 벡터 x에서 패턴이 처음에 나오는 위치를 반환 gregexpr()문자열 벡터 x에서 패턴이 나오는 모든 위치를 갚겠습니다R문자 처리 함수를 적용한 예는 다음과 같다.일단 문자 처리 함수 substr적용 예는 다음과 같다.R문자 처리 함수 substr적용 사례>Sys.time()#시스템에서 현재 날짜와 시간을 반환[1]”2022-08-18 16:01:42 KST”>substr(Sys.time(), 12, 20)#Sys.time()에서 12~20문자를 반환[1]”16:01:42″다음은 문자 처리 함수 nchar과 grep을 적용한 예이다.R문자 처리 함수 grep적용 사례>(x<-c(“Apple”,”Pear”,”Banana”,”Pine Apple”)[1]”Apple”Pear””Banana”Pine Apple”>nchar(x)[1]546 10>grep(“Apple”, x)#X에서 Apple의 문자열 위치 값을 갚았다[1]14다음은 문자 처리 함수 nchar과 grep을 적용한 예이다.R문자 처리 함수 paste, strsplit적용 사례>#문자열을, 하고 구분하여 하나의 문자열y를 생성(y<-paste(“Apple”,”Pear”,”Banana”,”Pine Apple”, sep=”,”)[1]”Apple, Pear, Bana, Pine Apple”>#y에서를 기준으로 분리된 문자열 전환>strsplit(y, split=”)[1]”Apple””Pear””Pine Apple”Apple”Peapple”다음은 문자 처리 함수 sub, gsub, regexpr, gregexpr를 적용한 예이다.R처리수함자 sub, gsub, regexpr, gregexpr(‘-‘이름은 무엇입니까?”제 이름은 앨리스예요”(1)”당신의 이름은 무엇입니까?”제 이름은 앨리스예요.”>#z서을z번째 name””퍼스트 네임””sub(“name”,”first name”, z)[1]?제 이름은 앨리스예요.”>#z서을모에 name””gsub(“name”,”first name”, z)[1]”당신의 이름은 무엇입니까?제 이름은 앨리스예요.”>#z에서 당신의 이름은 무엇입니까?””sub(“당신의 이름은 무엇입니까?”,”z”,”제 이름은 앨리스예요.”>#z서치 name작사위니다, 덱사타니다, 이사유니다>regexpr(“name”, z)[1]13attr(, match.length”)[1]4attr(, index.type”)[1]”chars”attr(, useBytes”)[1]TRUE>#zabethaname나도원이상에서, 가지만들어요, zpr1[22×1][grepr1]”13tfl(5)R날짜 처리 함수 R날짜 처리 함수는 시스템 날짜를 받아 처리하는 다양한 함수가 있다.우선 날짜를 문자 형식으로 변환하거나 문자를 날짜 형식으로 변환하는 함수는 다음과 같다.날짜를 문자 형식으로 변환하거나 문자를 날짜 형식으로 변환하는 함수 적용 사례>Sys.Date()#현재 시스템 날짜를 반납[1]”2022-08-18″>#시스템 날짜를 문자열로 변환한 결과 반환>as.character(Sys.Date()[1]”2022-08-18″>#문자 데이터를 날짜 형식으로 변환한 결과 반환>as.Date(“2022-09-20″)[1]”2022-09-20”>#날짜 형식이 잘못되어 있는 문자 데이터는 변환할 수 없다(에러 발생)>as.Date(“09/20/2022”)Error in charToDate(x):문자열이 표준 서식에 따르지 않겠어요>#문자 데이터 format형식을 날짜 형식으로 변환하고 반납>as.Date(“09/20/2022″, format=”%m/%d/%y”)[1]”2020-09-20″이하에 날짜부터 세월 일시 분초를 추출하는 함수는 다음과 같다.날짜부터 세월 일시 분초를 추출하는 함수 적용 사례>Sys.time()#시스템 시간 날짜 분초를 출력[1]”2022-08-18 16:06:57 KST”>#시스템 날짜를 dd/mm/yyyy형식의 문자로 변환>format(Sys.time(),”%m/%d/%Y”)[1]”08/18/2022″>format(Sys.time(),”%a”#요일 출력[1],”format”(나무)”,”,”. format”(c),”format(Sys.time(),”%y”)#두 자릿수의 나이 출력[1]”22″>format(Sys.time(),”%Y”)#네 자리 연 출력[1]”2022″>format(Sys.time(),”%H”)#시간 출력[1]”16″>format(Sys.time(),”%M”#분출력[1]’06’format(Sys.time(),”#57″(4)그룹별 분류 집계 함수 R의 분류 집계 함수는 단순히 그룹별로 집계하는 함수인 aggregate()과 주어진 함수를 행, 열 단위로 집계를 쉽게 하는 apply계열 함수가 있다.우선 aggregate()함수의 형식은 다음과 같다.aggregate()함수 형태 aggregate(X,#대상 변수 by,#그룹 기준 변수 데이터,#사용하는 데이터, 일반적으로 데이터 프레임 FUN,#각 그룹별로 적용하는 함수(합계:sum, 평균:mean표준 편차:sd등)…)반환 값은 데이터 테이블aggregate()함수 형식 적용 예는 다음과 같다.aggregate()함수 형식 적용 사례>score<-data.frame(이름=c(“홍길동”,”한·송희”,”심·순애”,”이·수위 르”)+성별=c(‘남자’,’여자’,’남자’)+국어=c(80, 90, 85, 85)+수학=c(70, 90, 70)#데이터 프레임 생성>aggregate(x=5번째 데이터 프레임에서 3, data[xcore].5 90 85다음 apply시스템 함수는 주어진 함수를 행, 열 단위로 집계를 쉽게 할 수 있는 함수이며, 표 2-20 같은 함수가 있다.[표 2-16]apply계열 함수함수 설명의 특징 apply()배열 또는 행렬에 주어진 함수를 적용한 뒤 그 결과를 벡터, 배열 또는 리스트에 반납 배열 또는 행렬에 적용 lapply()벡터, 목록 데이터 프레임 또는 표현식에 함수를 적용하고, 그 결과를 목록에 반환 결과가 리스트 sapply()lapply와 유사하지만 결과를 벡터, 행렬 또는 배열로 갚겠습니다.각 그룹마다 주어진 함수를 적용합니다적용한 결과, 둘째 요소를 적용한 결과 제삼 요소를 적용한 결과 등을 반환하는 다양한 데이터를 함수의 인자로서 적용그럼 apply계열 각 함수의 적용 예는 다음과 같다.그럼 apply계 각 함수의 적용 예는 다음과 같다.(7)R정렬 관련 함수 R의 정렬에 관련하는 함수는 큰 값 자체를 정렬한 sort와 값의 크기의 순서를 정한 order와 rank가 있다.이들 함수의 자세한 내용은 다음 표 2-17과 같다.함수 설명 sort(x, decreasing, na.last)벡터치 x를 오름차순 decreasing=FALSE내림차순 decreasing=TRUE에서 정렬된 값 반환.na.last는 x에 결 측치 NA(Not Available)을 최초로 갚으려면 TRUE, 마지막으로 갚으려면 FALSE을 지정하고 제거하려면 NA을 지정한다.order(x, decreasing, na.last)sort함수는 값을 정렬하는 경우에 사용하는 반면 order함수는 x에 순서 인덱스를 청할 때에 사용한다.즉 벡터치 x에 있는 값을 오름차순 decreasing=FALSE내림차순 decreasing=TRUE에서 순서를 정할 때에 사용한다.만약 x가 숫자 값인 경우 decreasing=TRUE이라고 하지 않고 – x이라고 하면 내림차순의 순서를 갚다.rank(x, na.last, ties.methodorder와 유사하고 x의 순서를 정하는 경우에 사용하여 함수에 decreasing인자를 사용할 수 없다.내림차순으로 정렬하려면 – x를 사용하여 order에서 – x는 숫자만 가능한 것에 대한, rank는 숫자, 문자 모두 가능하다.ties.method인자는 동점 처리 기준으로 “average”,”first”,”last”,’random’,’max’,’min’을 지정할 수 있다.정렬에 관련하는 함수의 사용법의 예는 다음과 같은 R스크립트를 보자.정렬과 관련된 함수 사용법의 예는 다음과 같은 R스크립트를 보자.2.9.2R데이터 마트 데이터 분석 처리를 효과적으로 수행하기 위해서 특정 분석 목적에 맞는 데이터만 미리 추출하고 체계적으로 구조화할 필요가 있다.이처럼 특정 목적에 맞는 데이터를 추출하고 구조화한 소규모의 데이터를 데이터 마트(data mart) 한다.R에서는 이러한 데이터 마트를 쉽게 구성하기 위한 다양한 패키지 함수를 갖고 있다.그 중에서 데이터 마트 구성 때문에 R로 자주 활용되는 패키지는 표 2-21과 같다.[표 2-17]R데이터 마트 구성에 관련하는 패키지패키지 내용 reshape데이터를 재구성(aggregation)에 의한 다차원 데이터 분석 sqldf SQL표준 문법을 이용한 데이터 분석 plyr데이터를 분리 또는 처리한 뒤 다시 결합에 의한 데이터 분석 데이터. table데이터의 빠른 그룹(grouping)및 정렬(ordering)에 의한 데이터 분석(1)Rreshape패키지 활용 Rreshape패키지는 데이터 재정렬에 의한 데이터 재구성이 가능한 함수를 제공하고 있다.데이터 재구성을 위하여 재구성 그룹(※)컬럼을 기준으로 2차원에서 데이터를 변수화하기 위한 함수인 melt()함수가 있어 melt()함수를 통해서 변수화된 데이터를 이용하고 3차원 피벗 테이블(pivot table)로 재구성하기 위한 cast()함수가 있다.melt()와 cast()함수의 형식은 다음과 같다.데이터 변수화 melt(data=데이터, id=재구성 그룹 칼럼, na.rm=TRUE)데이터 재구성 cast(data=변수화된 데이터, y축~x축 차원, 측정 변수)소스 데이터(source data)을 melt()함수를 이용하여 변수화하고 cast()함수를 통해서 3차원 피벗 테이블로 재구성하는 원리는 그림 2-11과 같다.그림 2-10 Rreshape패키지 함수의 melt()와 cast()과정에서는 구체적으로 Rreshape을 이용한 데이터를 재구성하는 사례를 보자.그림 2-10 Rreshape 패키지 함수의 melt()와 cast() 과정에서는 구체적으로 Rreshape를 이용한 데이터를 재구성하는 예를 보자.(2)sqldf패키지 활용 sqldf패키지는 표준 SQL(Structured Query Language)에서 사용하는 모든 쿼리 구문을 R에서 사용할 수 있도록 한다.R에서 SQL을 사용하는 함수도 패키지 이름과 마찬가지로 sqldf()이다.그럼 sqldf패키지를 설치하고 표준 SQL을 이용하여 데이터를 검색하는 다음과 같은 예를 보자.(2) sqldf 패키지 활용 sqldf 패키지는 표준 SQL(Structured Query Language)에서 사용하는 모든 쿼리 구문을 R에서 사용할 수 있도록 한다. R에서 SQL을 사용하는 함수도 패키지 이름과 마찬가지로 sqldf()이다. 이제 sqldf 패키지를 설치하고 표준 SQL을 이용하여 데이터를 검색하는 다음과 같은 예를 살펴보자.(3)plyr패키지 활용 plyr패키지에 포함된 함수는 데이터를 분리하고 처리한 후 다시 결합하는 등의 데이터 처리 기능을 제공한다.plyr패키지 함수는 과거 거론한 내장 함수 apply와 다른 소스 데이터와 함께 처리된 결과를 동시에 출력하는 경우에 사용한다.plyr패키지에 포함되는 함수 계열 ply()는 접두사에 두개의 영문자를 접두어로서 갖지만 첫번째 문자는 입력하는 데이터 유형을 표시하고 두번째 문자는 출력하는 데이터 형태를 나타낸다.즉, d는 데이터 프레임(data frame)를 뜻하고 a는 배열(arrary)l은 리스트(list)을 의미한다.이런 규칙을 가진 plyr패키지에 포함되는 함수는 다음 표 2-18과 같다.[표 2-18]plyr패키지계 함수력력 data.framelist arraydata.”dply(ldply)”adpply(listdlly)”llly(ally)”arraydaply(laply)”aaply”예를 들어 Rplyr패키지 계열 함수에서 데이터 분석에 가장 많이 활용된다 ddply()함수는 입력 데이터는 데이터 프레임 형식이 아니면 안 되고 처리 결과도 데이터 프레임 형태로 출력된다.ddply()함수의 형식은 다음과 같다.ddply()함수 형태 ddply(데이터, .(그룹 변수 이름), ddply내부 함수, 컬럼 이름=함수(적용 칼럼), 컬럼 이름=함수(적용 칼럼)…)반환 값은 데이터 프레임 형식ddply내부 함수의 종류는 다음 표 2-19와 같다.[표 2-19]ddply내부 함수ddply내부 함수 설명 summarize그룹 변수별 함수 결과치 데이터 프레임 생성 transform그룹 변수별 함수 결과치(※)컬럼을 원래의 데이터 프레임에 결합 mutatetransform과 비슷하지만 확장 함수 컬럼의 결과가 순차 연산되기 때문에 전에 생성된 확장 함수 값을 나중에 함수로 사용 가능 subset그룹별 연산의 결과를 토대로 추가되는 조건에 만족하는 데이터 출력그럼 지금부터 plyr패키지 함수의 활용 예를 보자plyr키에게보내는 답제>install.packages(“plyr”)패키지 LibPath버전의 선취권이 수입에 의존하는 License_is_의 확장을 제안하는 링크 FOSS License_restricts_use OS_type Archs MD5sum Needs Compilation Build>라이브러리(plyr)다음의패키지를 부착합니다:’plyr’다음의 객체는,”package:reshape”,”round_any”의 스코어<-data.frame(년한=c(1, 1, 2, 2, 3, 3, 3),+명(“=c에게보내는 답김”)+별나=c에서””””에서”,”에서”,”,”에게”, 85(80, 80, 80, 80, 90), 80+=c.frame(-data)에서 마스크 되고 있습니다 ore$수학)/3)#학생별과목 평균>score<-cbind(score, 평균)>score학년성명 성별 국어영어 수학 평균 1 1홍길동남 80 75 70 752 1한송희여 90 95 90 923 2심순애여 85 85 80 834 2이수일남 80 85 70 785 3최하나여 90 95 90 926 3김수로남 80 75 75 777 3이상해남 70 75 80 75>#성별평균을 출력>ddply(score, .(성별), summarise, 평균평균=round(mean(평균)성별평균평균 1남 762여89>#성적자료와 성별평균 출력>ddply(score, .(성별), transform, 평균평균=round(mean(평균)학년성명 성별 국어영어 수학 평균평균평균 1 1홍길동남 80 75 70 75 762 2이수일남 80 85 70 78 763 3김수로남 80 75 75 77 764 3이상해남 70 75 80 75 765 1한송희여 90 95 90 92 896 2심순애여 85 85 80 83 897 3최하나여 90 95 90 92 89>#성적자료와 성별평균 출력과차이까지 출력>ddply(score, .(성별), mutate, 평균평균=round(mean(평균),평균차이=평균-평균평균)학년성명 성별 국어영어 수학 평균평균평균 평균차이 1 1홍길동남 80 75 70 75 76-12 2이수일남 80 85 70 78 76 23 3김수로남 80 75 75 77 76 14 3이상해남 70 75 80 75 76-15 1한송희여 90 95 90 92 89 36 2심순애여 85 85 80 83 89-67 3최하나여 90 95 90 92 89 3그동안 Rplyr패키지 함수 ddply()의 활용을 예로 들어 봤다.Rplyr패키지의 다른 계열에 함수 형태도 입력형으로 출력 형식이 다를 뿐이다.(4)data.table패키지 활용 데이터. table패키지 함수는 다른 타입의 데이터로 구성할 수 있는 데이터 프레임과 비슷하지만 많은 키 항목을 지정할 수 있어 데이터를 보다 빠른 검색으로 집계 요약할 수 있다는 장점을 가지고 있다.그럼 다음과 같이 데이터. table패키지 활용 예를 보자.data.table패에서>install.data.table”)URL’https://cran.rstudio.com/bin/windows/contrib/4.1/data.table_1.14.2.zip’Content type’application/zip’length 2600199 byte(2.5 MB)다운로드했다2.5 MB패키지’data.table’이 정상적으로 언팩되고 MD5의 합계가 체크된 다운로드된 바이너리 패키지는 C:\사용자\choi의 AppData\Local\Temp\RtmpQRERKP\downloaded_packages>library(data.table)data.table 1.14.2(4개의 스레드를 사용)(?getDTthreads를 참조).최신 뉴스:r-datatable.com음의를키패지합니:’data.table’다음의 객체는 ‘package:reshape’:meltWarning메시지에서 마스크 됩니다:패키지’data.table’는 R버전4.1.3에서 작성되었습니다>score<-data.frame(학년=c(1, 1, 2, 2, 3, 3, 3),+성명=c(“홍길동”,”한송희”,”심순애”,”이수일”,”최하나”,”김수로”,”이상해”),+성별=c(“남”,”여”,”여”,”남”,”여”,”남”,”남”),+국어=c(80, 90, 85, 80, 90, 80, 70),+영어=c(75, 95, 85, 85, 95, 75, 75),+수학=c(70, 90, 80, 70, 90, 75, 80)>평균<-round(score$국어+score$영어+score$수학)/3)#학생별과목 평균>score<-cbind(score, 균평)>system.time(score[score$score==”context”])score.dt<-as.data.table(score)#score테에서 data.table환에서>setkey(score.dt, 별에)#score.dt정에게>tables이름 NROWNCOLMBCOLS키1:score.dt 770학성, 명성, 별국, 어어,… 그렇긴합계:0MB>system.time(score.dt[score.dt$성별==”context”])사용자시스템 elapsed 0 0 0데이터. table패키지 함수에서 데이터 분석에 유용하게 사용하는 함수로 shift()가 있다.데이터. table:shift()함수의 형식은 다음과 같다.데이터. table:shift()함수 형식 shift(x,#벡터, 데이터 소스 n=1L,#몇번째의 이전(이후)값을 취득할지 지정 fill=NA,# 채우는 값이 없는 경우에 기본으로 NA치를 충족 type=c(“shift”,”lag”,”lead”),#전 값 또는 후 값을 취득할지 give.names=FALSE)#값 이름 지정 반환 값은 shift()함수치데이터. table패키지 시프트()함수의 사용 예는 다음과 같다.데이터.table 패키지 시프트() 함수의 사용 예는 다음과 같다.지금까지 실습한 R프로그래밍 이해 실습 스크립트는 다음과 같습니다.첨부 파일 제09장 R프로그래밍 기초(실습 스크립트).txt파일 다운로드 내 컴퓨터 저장네이버 MYBOX에 저장끝. 포스팅을 마치겠습니다.^)

error: Content is protected !!