인공지능 개발자 양성 과정

[0412] R 프로그래밍 익히기

AI gina 2022. 4. 13. 07:47

[R 프로그래밍 기초함수]

- 벡터 : 1차원이며, 한가지 데이터 유형으로 구성, 할당 연산자인 <- 와 c() 함수 이용해 생성.

변수명 <- c(값)

- mode() : 데이터 유형 확인 함수

- typeof() : 데이터 유형 확인 함수. 숫자형을 정수와 실수 구분함. (실수: double, 정수: integer)

- str() : 데이터 유형과 값을 전체적으로 확인하는 함수

- length() :  데이터 길이 확인하는 함수

- remove(), rm() : 직접 생성했거나 불러오기로 가져온 데이터 세트 삭제

- factor() : 범주형 자료(categorical data) 생성

 

factor(범주화할 자료, labels = c("범주1", "범주2"))

 

 - matrix() : 행렬(행과 열로 구성된 2차원 단일형 데이터) 생성

matrix(벡터, nrow=행 개수, ncol=열 개수)
matrix(벡터, nrow=행 개수, ncol=열 개수, byrow=T) #byrow=T 옵션으로 데이터 배치 순서 행방향으로 변경.

 

- array() : 배열(행렬을 n차원으로 확대한 구조) 생성

array(변수명, dim = c(행 수, 열 수, 차원수))

 

- list() : 리스트(1차원 데이터인 벡터나, 서로 다른 구조의 데이터를 그룹으로 묶은 데이터 세트) 생성

- data.frame() : 데이터프레임(리스트를 2차원으로 확대한 것) 생성

data.frame(변수명1, 변수명2, ..., 변수명n)

 

- sum(), min(), max() : 합계, 최소값, 최대값 출력 함수

- Sys.Date() : 오늘 날짜 출력 함수

- 사용자정의함수 : 내장 함수 이외에 사용자가 원하는 기능을 만들기 위해 작성.

함수명 <- function(매개변수1, 매개변수2,...) {
    함수가 구현할 내용
    ...
    return(결과값)
}

 

- cat() : 여러 숫자, 문자 구분없이 모두 출력

- print() : 입력된 첫번째 숫자 또는 문자(열)만 출력

- install.packages() : 패키지 설치 (패키지명에 " " 표시)

- library() : 설치한 패키지 확인

- remove.packages() : 설치한 패키지 삭제

- if-else 조건문 : 조건이 TRUE면 구문1이 실행되고, FALSE면 구문2가 실행

#if-else 조건문
if(조건) {
  조건이 TRUE(참)일 때 실행되는 구문1
} else {
  조건이 FALSE(거짓)일 때 실행되는 구문2
}

#else if문
if(조건1) {
  조건이 TRUE(참)일 때 실행되는 구문1
} else if (조건2) {
   조건1은 FALSE(거짓)이고, 조건 2는 TRUE(참)일 때 실행되는 구문2
} else {
  조건1과 2 모두 FALSE(거짓)일 때 실행되는 구문3
}

 

- for() : 프로그래밍에서 반복문으로 많이 사용하는 함수

for(변수 in 반복 횟수) {
    반복 조건만큼 실행되는 구문
}

#이중 for문
for(i in 2:9) {
   for(j in 1:9) {
      print(paste(i, "*", j, "=", i*j))
    }
}

 

- apply() : 행렬 연산에 사용, x에 행렬 넣고 margin 옵션이 1이면 행, 2이면 열에 함수가 적용.

apply(x, margin, 함수)

 

- lapply() : 연산 결과를 리스트로 변환. 모든 자료형에 사용 할 수 있음.

- sapply() : 연산 결과를 벡터로 반환. 모든 자료형에 사용 할 수 있음.

lapply(x, 함수)
sapply(x, 함수)

 


[2022 04 12 과제] R 프로그래밍 실습

 

=

Q1. 시험 점수 변수 만들고 출력하기

다섯 명의 학생이 시험을 봤습니다. 학생 다섯 명의 시험 점수를 담고 있는 변수를 만들어 출력해 보세요.

각 학생의 시험 점수는 다음과 같습니다.

80, 60, 70, 50, 90

> test <- c(80, 60, 70, 50, 90)
> test
[1] 80 60 70 50 90

 

Q2. 전체 평균 구하기

앞 문제에서 만든 변수를 이용해서 이 학생들의 전체 평균 점수를 구해보세요.

> mean(test)
[1] 70

 

Q3. 전체 평균 변수 만들고 출력하기

전체 평균 점수를 담고 있는 새 변수를 만들어 출력해 보세요. 앞 문제를 풀 때 사용한 코드를 응용하면 됩니다.

> test_mean <- mean(test)
> test_mean
[1] 70

Q1. data.frame()과 c()를 조합해서 표의 내용을 데이터 프레임으로 만들어 출력해보세요.

제품  가격  판매량

----------------------

사과  1800  24

딸기  1500 38

수박  3000 13

 

> 제품 <- c("사과", "딸기", "수박")
> 가격 <- c(1800,1500,3000)
> 판매량 <- c(24,38,13)
> a <- data.frame(제품, 가격, 판매량)
> a
  제품 가격 판매량
1 사과 1800     24
2 딸기 1500     38
3 수박 3000     13

 

 

Q2. 앞에서 만든 데이터 프레임을 이용해서 과일 가격 평균, 판매량 평균을 구해보세요.

> mean(a$가격)
[1] 2100
> mean(a$판매량)
[1] 25

[2022 04 12 과제2] (Vector/Matrix)

 

1. seq() 함수를 사용하여 date4 라는 변수에 2015년1월1일부터 2015년1월31일까지 1일씩 증가하는

31개의 날짜를 입력하는 방법을 쓰세요. 

#seq.Date() 함수 사용
> date1 <- as.Date("2015-01-01") 
> date2 <- as.Date("2015-01-31")
> date4 <- seq.Date(date1, date2, 1)
> date4
 [1] "2015-01-01" "2015-01-02" "2015-01-03" "2015-01-04"
 [5] "2015-01-05" "2015-01-06" "2015-01-07" "2015-01-08"
 [9] "2015-01-09" "2015-01-10" "2015-01-11" "2015-01-12"
[13] "2015-01-13" "2015-01-14" "2015-01-15" "2015-01-16"
[17] "2015-01-17" "2015-01-18" "2015-01-19" "2015-01-20"
[21] "2015-01-21" "2015-01-22" "2015-01-23" "2015-01-24"
[25] "2015-01-25" "2015-01-26" "2015-01-27" "

#seq() 함수 사용
> seq(as.Date("2022-04-01"), as.Date("2022-04-13"), by="day") 
 [1] "2022-04-01" "2022-04-02" "2022-04-03" "2022-04-04"
 [5] "2022-04-05" "2022-04-06" "2022-04-07" "2022-04-08"
 [9] "2022-04-09" "2022-04-10" "2022-04-11" "2022-04-12"
[13] "2022-04-13"

 

2. 아래 그림과 같이 vec1을 생성하세요.

위의 vec1 에서 3번째 요소인 '감'을 제외하고 vec1의 값을 출력하세요.

> vec1 <- c("사과","배","감","버섯","고구마")
> vec1
[1] "사과"   "배"     "감"     "버섯"   "고구마"
> vec1[-3]
[1] "사과"   "배"     "버섯"   "고구마"

3. 아래 그림과 같이 vec1과 vec2를 만드세요.

1) vec1과 vec2 내용을 모두 합친 결과를 출력하는 코드를 쓰세요

> vec1 <- c("봄","여름","가을","겨울")
> vec2 <- c("봄","여름","늦여름","초가을")
> union(vec1,vec2) #합집합 함수
[1] "봄"     "여름"   "가을"   "겨울"   "늦여름" "초가을"

2) vec1에는 있는데 vec2에는 없는 결과를 출력하는 코드를 쓰세요

> setdiff(vec1,vec2) #차집합 함수
[1] "가을" "겨울"

3) vec1과 vec2 모두 있는 결과를 출력하는 코드를 쓰세요

> intersect(vec1,vec2) #교집합 함수

 


1. 아래 그림과 같은 형태의 행렬을 만드세요

1)

> seasons <- matrix(c("봄","여름","가을","겨울"), nrow=2)
> seasons
     [,1]   [,2]  
[1,] "봄"   "가을"
[2,] "여름" "겨울"

2)

> matrix(seasons, nrow=2, byrow=T)
     [,1]   [,2]  
[1,] "봄"   "여름"
[2,] "가을" "겨울"

2. 아래 그림과 같이 seasons 행렬에서 여름과 겨울만 조회하는 방법을 쓰세요

> seasons[,2]
[1] "여름" "겨울"

3. 아래 그림과 같이 seasons 행렬에 3번 행을 추가하여 seasons_2 행렬을 만드세요.

> seasons_2 <- rbind(seasons,c("초봄","초가을")) #행추가
> seasons_2
     [,1]   [,2]    
[1,] "봄"   "가을"  
[2,] "여름" "겨울"  
[3,] "초봄" "초가을"

4. 아래 그림처럼 seasons_2 변수에 열을 추가하여 seasons_3 행렬을 만드세요 

 seasons_3 <- cbind(seasons_2,c("초여름","초겨울","한겨울")) #열추가
> seasons_3
     [,1]   [,2]     [,3]    
[1,] "봄"   "가을"   "초여름"
[2,] "여름" "겨울"   "초겨울"
[3,] "초봄" "초가을" "한겨울"