[R프로그래밍] 벡터, 리스트, 팩터
📌 벡터
1차원 배열 데이터 ex) 몸무게, 영어 성적
2차원 배열 데이터 ex) 전과목 성적
✔ 벡터만들기
> x <- c(1,2,3)
> y <- c("a","b","c")
> z <- c(TRUE, TRUE, FALSE, TRUE)
> w <- c(1,2,3,"a","b","c")
> x
[1] 1 2 3
> y
[1] "a" "b" "c"
> z
[1] TRUE TRUE FALSE TRUE
> w
[1] "1" "2" "3" "a" "b" "c"
✔ 연속적인 숫자로 이루어진 벡터 생성
> v1 <- 50:90
> v1
[1] 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
[24] 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
> v2 <- c(1,2,5,50:90)
> v2
[1] 1 2 5 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
[24] 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
✔ 일정한 간격의 숫자로 이루어진 벡터 생성
> v3 <- seq(1,101,3)
> v3
[1] 1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49
[18] 52 55 58 61 64 67 70 73 76 79 82 85 88 91 94 97 100
> v4 <- seq(0.1, 1.0, 0.1)
> v4
[1] 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
✔ 반복된 숫자로 이루어진 벡터 생성
> v5 <- rep(1,times=5) #1을 5번 반복
> v5
[1] 1 1 1 1 1
> v6 <- rep(1:5, times=3) #1에서 5까지 3번 반복
> v6
[1] 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
> v7 <- rep(c(1,5,9), times=3) #1,5,9를 3번 반복
> v7
[1] 1 5 9 1 5 9 1 5 9
✔ 벡터의 원소값에 이름 지정
> score <- c(90,85,70) #성적
> score
[1] 90 85 70
> names(score) #score에 저장된 값들의 이름
NULL
> names(score) <- c("john", "tom", "jane") #값들에 이름 부여
> names(score)
[1] "john" "tom" "jane"
> score #이름과 함께 값이 출력
john tom jane
90 85 70
✔벡터에서 원소값 추출
> d <- c(1,4,3,7,8)
> d[1]
[1] 1
> d[3]
[1] 3
> d[6]
[1] NA
✔ 여러 개의 값 한 번에 추출
> d <- c(1,4,3,7,8)
> d[c(1,3,5)] #1,3,5번째 값 출력
[1] 1 3 8
> d[1:3] #처음 세 개의 값 출력
[1] 1 4 3
> d[seq(1,5,2)] #홀수번재 값 출력
[1] 1 3 8
> d[-2] #2번째 값 제외하고 출력
[1] 1 3 7 8
> d[-c(3:5)] #3~5번째 값 제외하고 출력
[1] 1 4
✔ 이름으로 값 추출
> GNP <- c(2090, 2450, 960)
> GNP
[1] 2090 2450 960
> names(GNP) <- c("korea","japan","nepal")
> GNP
korea japan nepal
2090 2450 960
> GNP[1]
korea
2090
> GNP["korea"]
korea
2090
> GNP[c("korea","japan","nepal")]
korea japan nepal
2090 2450 960
✔ 벡터에 저장된 원소값 변경
> v1 <- c(1,5,7,8,9)
> v1
[1] 1 5 7 8 9
> v1[2] <- 3 #v1의 2번째 값을 3으로 변경
> v1
[1] 1 3 7 8 9
> v1[c(1,5)] <- c(10,20) #v1의 1,5번째 값을 각각 10,20으로 변경
> v1
[1] 10 3 7 8 20
✔ 벡터의 연산
벡터와 숫자값 연산
벡터에 대한 산술 연산은 벡터 안에 포함된 값들에 대한 연산으로 바뀌어 실행
> d <- c(1,4,3,7,8)
> 2*d
[1] 2 8 6 14 16
> d-5
[1] -4 -1 -2 2 3
> 3*d+4
[1] 7 16 13 25 28
벡터와 벡터 간의 연산
벡터 간의 대응되는 위치에 있는 값끼리의 연산으로 바꾸어 실행
> x <- c(1,2,3)
> y <- c(4,5,6)
> x+y
[1] 5 7 9
> x*y
[1] 4 10 18
> z <- x+y #x,y를 더하여 z에 저장
> z
[1] 5 7 9
✔ 벡터에 적용 가능한 함수
> d <- c(1,2,3,4,5,6,7,8,9,10)
> sum(d) #d에 포함된 값들의 합
[1] 55
> sum(2*d) #d에 포함된 값들에 2를 곱한 후 합한 값
[1] 110
> length(d) #d에 포함된 값들의 개수
[1] 10
> mean(d[1:5]) #1~5번째 값들의 평균
[1] 3
> max(d) #d에 포함된 값들의 최댓값
[1] 10
> min(d) #d에 포함된 값들의 최솟값
[1] 1
> sort(d) #오름차순 정렬
[1] 1 2 3 4 5 6 7 8 9 10
> sort(d, decreasing=FALSE) #오름차순 정렬
[1] 1 2 3 4 5 6 7 8 9 10
> sort(d, decreasing=TRUE) #내림차순 정렬
[1] 10 9 8 7 6 5 4 3 2 1
✔ 논리연산자 사용
> d <- c(1,2,3,4,5,6,7,8,9)
> d>=5
[1] FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE
> d[d>5] #5보다 큰 값
[1] 6 7 8 9
> sum(d>5) #5보다 큰 값의 개수 출력
[1] 4
> sum(d[d>5]) #5보다 큰 값의 합계 출력
[1] 30
> d==5
[1] FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
> condi <- d>5 & d<8 #조건을 변수에 저장
> d[condi] #조건에 맞는 값들을 선택
[1] 6 7
📌 리스트
서로 다른 자료형의 값들을 1차원 배열에 저장하고 다룰 수 있도록 해주는 수단
> ds <- c(90,85,70,84)
> my.info <- list(name='Tom', age=60, status=TRUE, score=ds)
> my.info #리스트에 저장된 내용을 모두 출력
$name
[1] "Tom"
$age
[1] 60
$status
[1] TRUE
$score
[1] 90 85 70 84
> my.info[[1]] #리스트의 첫 번째 값 출력
[1] "Tom"
> my.info$name #리스트에서 값의 이름이 name인 값 출력
[1] "Tom"
> my.info[[4]] #리스트의 네 번째 값 출력
[1] 90 85 70 84
📌 팩터
문자형 데이터가 저장된 벡터의 일종
성별, 혈액형, 선호 정당 등과 같이 저장할 문자값들이 몇 종류로 정해져 있을 때 팩터를 사용
> bt <- c('A','B','B','O','AB','A') #문자형 벡터 bt 정의
> bt.new <- factor(bt) #벡터 bt.new 정의
> bt #벡터 bt의 내용 출력
[1] "A" "B" "B" "O" "AB" "A"
> bt.new #팩터 bt.new의 내용 출력
[1] A B B O AB A
Levels: A AB B O
> bt[5] #벡터 bt의 5번째 값 출력
[1] "AB"
> bt.new[5] #팩터 bt.new의 5번째 값 출력
[1] AB
Levels: A AB B O
> levels(bt.new) #팩터에 저장된 값의 종류를 출력
[1] "A" "AB" "B" "O"
> as.integer(bt.new) #팩터의 문자값을 숫자로 바꾸어 출력
[1] 1 3 3 4 2 1
> bt.new[7] <- 'B' #팩터 bt.new의 7번째에 'B'저장
> bt.new[8] <- 'C' #팩터 bt.new의 8번째에 'C'저장, C는 없어서 오류
경고메시지(들):
In `[<-.factor`(`*tmp*`, 8, value = "C") :
invalid factor level, NA generated
> bt.new #팩터 bt.new의 내용 출력 (변경된 내용과 없는 건 <NA>로 출력
[1] A B B O AB A B <NA>
Levels: A AB B O
Author And Source
이 문제에 관하여([R프로그래밍] 벡터, 리스트, 팩터), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ming_/R프로그래밍-벡터저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)