본문 바로가기
Data Science/R

[R 공부하기] 2. 변수와 벡터 - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2024. 3. 24.
728x90
반응형

 

목차

  1. 변수
  2. 벡터(vector)
    • 벡터 생성
    • 연속적인 벡터 생성
    • 결합형 벡터 생성
    • 벡터에 이름 부여
    • 벡터 인덱싱
  3. 벡터의 연산
    • 산술 연산
    • 비교 연산
    • 논리 연산
    • 집합 연산
    • 벡터 요소 간 연산
  4. 벡터 다루기
    • any, all, which, subset
    • NA, NULL
    • 벡터의 형변환
    • 문자 벡터 연산
  5. 팩터(factor)
    • 명목형 팩터 생성
    • 순서형 팩터 생성
    • 팩터 관련 함수
  6. 리스트
    • 리스트 생성
    • 리스트 조회
    • 리스트 항목 추가
    • 리스트 데이터 변경
    • 리스트 키 이름 확인 및 변경
    • 리스트 항목 삭제
    • 리스트 합치기
    • 리스트의 크기 확인
    •  unlist

 

1. 변수

변수란 프로그램에서 어떤 값을 저장하는 저장소나 보관 박스를 의미한다.
변수명 지정 규칙

  • 첫 글자영문자(알파벳) or 마침표(.)로 시작 (일반적으로는 영문자로 시작)
  • 두 번째 글자부터는 영문자, 숫자, 마침표(.), 밑줄(_) 사용 가능
  • 대문자와 소문자구분
  • 변수명 중간에 빈칸을 넣을 수 없음

변수에 값을 저장할 때는 변수명 ← 값 형식으로 작성하면 된다.
변수의 자료형에는 숫자형(정수, 실수), 문자형(' ', " "), 논리형(TRUE, FALSE), 특수값(NULL, NA, NaN, Inf, -Inf)이 있다.
 
변수에 저장된 값은 언제라도 변경할 수 있다.
변수의 자료형은 어떤 값을 저장하는가에 따라 유동적으로 바뀐다.
 

2. 벡터(vector)

벡터(vector)는 R 데이터 구조의 가장 기본적인 형태이다.
1차원 형태의 데이터를 저장할 수 있는 저장소로 같은 타입의 값들의 집합이다.
벡터를 생성할 때는 c() 함수를 사용하면 된다.
c() 함수 안에 같은 타입의 값들을 나열하고 이를 변수에 저장하면 된다.
 
또는 assign() 함수를 사용하여 벡터를 생성할 수 있다.
assign() 함수 안에 변수명과 c() 함수를 사용해 생성한 벡터를 적어주면 된다.
assign("변수명", c(값1, 값2, ... )) 형태로 작성하면 된다.
 

연속적인 숫자로 이루어진 벡터도 생성할 수 있다.
연속적인 벡터를 생성할 때는 seq() 함수rep() 함수를 사용하면 된다.
seq() 함수를 사용할 때는 seq(시작 값, 끝 값, 간격) 형식으로 벡터를 생성하면 된다.
seq() 함수의 각 인자는 정수뿐만 아니라, 실수도 가능하다.
 
rep() 함수를 사용할 때는 rep(값, 반복 횟수) 형식으로 벡터를 생성하면 된다.
rep() 함수는 rep(값, times = 횟수) 형식과 rep(값, each = 횟수) 형식으로 나눌 수 있다.
rep(값, times = 횟수) 형식은 해당 값을 한 덩어리로 생각하여 덩어리 자체를 횟수만큼 반복한 벡터이다.
rep(값, each = 횟수) 형식은 해당 값의 각 값들을 개별로 생각하여 각 값들을 횟수만큼 반복한 벡터이다.
각 형식으로 생성한 벡터의 차이를 구별할 수 있어야 한다.
 

문자열을 여러 개 결합한 벡터인 결합형 벡터도 생성할 수 있다.
결합형 벡터를 생성할 때는 paste() 함수를 사용하면 된다.
paste() 함수는 반복해서 붙여 넣는 함수로, paste(문자열, 숫자) 형식으로 벡터를 생성하면 된다.
이때 sep 옵션을 사용할 수 있는데, sep 옵션은 값과 숫자를 문자형으로 만들 때 사이에 넣어줄 문자를 지정하는 것이다.
 

생성한 벡터의 원소값에 개별적으로 이름을 지정할 수 있다.
벡터의 원소값에 이름을 지정할 때는 names() 함수를 사용하면 된다.
names() 함수 안에 이름을 지정할 벡터의 변수명을 작성하고 c() 함수를 이용해 벡터의 원소별 이름을 지정해 주면 된다.
names(벡터 변수명) ← c(이름1, 이름2, ... ) 형식으로 벡터의 원소값에 이름을 지정할 수 있다.
 

생성한 벡터에서 특정 원소값을 추출할 때는 벡터명[인덱스 번호] 형식으로 작성해 주면 된다.
R에서 인덱스 번호는 Python에서와 달리 1부터 시작하여 1씩 증가한다.
인덱스 번호를 벡터 형식으로 주면 벡터의 값에 해당하는 원소값을 여러 개 힌 번에 출력할 수 있다.
인덱스 번호를 음수로 주면 해당 위치만 빼고 벡터를 출력한다.
인덱스 번호를 [시작 : 끝] 형식으로 주면 시작 ~ 끝에 해당하는 원소값을 출력한다.
인덱스 번호에 조건을 주게 되면 해당 조건을 만족하는 원소값만을 출력하게 된다.
 
이를 활용해 인덱스로 벡터 요소를 추출한 후 해당 벡터의 값을 변경할 수 있다.
벡터의 값을 변경할 때도 마찬가지로 인덱스 번호에 벡터를 사용할 수 있고, 음수를 사용할 수 있고, 범위를 사용할 수 있고, 조건을 사용할 수 있다.
R 스크립트문 뒤에 ;를 붙여 스크립트를 이어서 작성할 수 있다.
 

벡터의 각 원소에 이름이 주어진 형태라면 원소의 이름으로도 벡터의 원소값을 추출할 수 있다.
마찬가지로 벡터 형식으로 원소의 이름을 입력하면 각 원소의 이름에 해당하는 원소값을 출력한다.
 

3. 벡터의 연산

산술 연산에는 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), 제곱(^, **), 나머지(%%), 몫(%/%) 연산이 있다.
 

비교 연산에는 크다와 작다(>, <), 크거나 같다와 작거나 같다(>=, <=), 같다(==), 다르다(!=) 연산이 있다.
비교 연산의 결과는 TRUE와 FALSE로 출력된다.
 

논리 연산에는 or(|), and(&), not(!), isTRUE() 연산이 있다.
논리 연산의 결과 또한 비교 연산의 결과처럼 TRUE와 FALSE로 출력된다.
 

벡터의 집합 연산은 합집합(union), 교집합(intersect), 차집합(setdiff), 동일 집합 확인(setequal) 연산이 있다.
합집합과 교집합 연산을 할 때는 벡터의 위치가 상관없지만, 차집합 연산을 할 때는 벡터의 위치에 따라 결과가 다르게 나온다. 앞에 적은 집합에서 뒤에 적은 집합을 차집합하는 결과가 출력된다.
동일 집합 확인 연산은 두 집합의 원소 위치와는 상관없이 동일한 원소가 모두 있으면 TRUE를, 동일한 원소가 하나라도 없으면 FALSE를 반환하게 된다.
 

벡터와 벡터 간의 연산을 할 때는 벡터 간의 대응되는 위치에 있는 값끼리의 연산으로 바꾸어 실행하게 된다.
만약 두 벡터의 길이가 같으면 같은 위치의 요소끼리 연산한다.
만약 요소의 길이가 다를 때, 요소의 길이가 배수 관계에 있으면 작은 쪽 벡터의 요소를 순환하며 연산한다.
반면에 요소의 길이도 다르고 요소의 길이가 배수 관계에도 있지 않으면 warning이 발생하게 된다.
이때 warning이 발생하더라도 결과는 출력되긴 한다.

반응형

4. 벡터 다루기

any() 함수는 벡터 내 일부 요소가 조건을 만족하는지 확인하는 함수이다.
any() 함수 안에 조건을 적었을 때, 벡터 내 요소 중 하나라도 조건을 만족하면 TRUE를 반환한다.
all() 함수는 벡터 내 모든 요소가 조건을 만족하는지 확인하는 함수이다.
all() 함수 안에 조건을 적었을 때, 벡터 내 요소 모두가 조건을 만족하면 TRUE를 반환한다.
which() 함수는 조건을 만족하는 요소의 위치를 확인하는 함수이다.
만약 조건을 만족하는 요소가 여러 개이면 모든 요소의 위치를 반환한다.
subset() 함수는 벡터의 부분 집합을 생성하는 함수이다.
subset() 함수 안에 벡터와 조건을 적으면 벡터에서 해당 조건을 만족하는 요소들만 추출해 부분 집합을 생성한다.
 
NA는 누락된 값으로 해당 값이 포함된 벡터는 연산이 불가능하다.
해당 벡터를 연산 함수에 넣으면 NA가 반환된다.
NULL은 존재하지 않는 값으로 해당 값이 포함된 벡터는 무시하고 연산을 할 수 있다.
해당 벡터를 연산 함수에 넣으면 NULL을 무시하고 해당 연산이 수행되어 반환된다.
만약 NA가 포함된 벡터를 연산 함수에 넣을 때 na.rm 옵션T로 바꿔 함께 작성하면 NA 값을 무시하고 연산을 할 수 있다.
 

벡터에 서로 다른 데이터 형이 들어갈 경우 강제로 형 변환이 발생하게 된다.
정수와 실수가 섞여 있을 경우 실수로 형변환이 되고, 숫자와 문자가 섞어 있을 경우 문자로 형변환이 된다.
문자형으로 이루어진 벡터연산이 불가능하다.
 

5. 팩터(factor)

팩터(factor)는 범주형(Categorical) 데이터를 표현하는 데이터 구조이다.
사전에 정해진 특정 유형으로 분류되는 데이터로, 정해진 값들을 레벨(level)이라고 부른다.
 
명목형 팩터를 생성할 때는 factor() 함수를 사용한다.
factor() 함수에 벡터를 넣으면 해당 벡터가 명목형 팩터로 변경되게 된다.
level은 팩터의 각 값을 의미한다.
 

순서형 팩터를 생성할 때는 ordered() 함수를 사용할 수 있다.
ordered() 함수 안에 벡터를 넣고, levels 옵션값의 순서를 벡터 형태로 넣으면 된다.
또한 명목형 팩터를 생성할 때와 동일하게 factor() 함수를 사용할 수 있다.
factor() 함수로 생성할 때는 ordered() 함수처럼 벡터와 levels 옵션을 넣고 마지막에 ordered 옵션T로 지정하여 생성하면 된다.
 

팩터와 관련된 함수를 살펴보면, 우선 nlevels() 함수는 해당 팩터의 레벨의 개수를 반환한다.
levels() 함수는 해당 팩터의 레벨 목록을 반환한다.
is.factor() 함수는 해당 팩터가 팩터인지 확인하는 함수로 팩터이면 TRUE를 반환한다.
is.ordered() 함수는 해당 팩터가 순서형 팩터인지 확인하는 함수로 순서형 팩터이면 TRUE를 반환한다.

6. 리스트

리스트는 다른 말로 generic vector 또는 recursive vector라고 한다.
R에서 리스트는 벡터들을 다시 묶은 것으로 말할 수 있는데 해당 요소를 더 낮은 레벨로 분리할 수도 있다.
(키, 값) 형태의 데이터를 담는 연관 배열(associative array)라고 할 수 있다.
리스트에는 어떠한 형태의 데이터 객체도 저장할 수 있여러 형태를 섞어서 저장할 수도 있다.
 
리스트를 생성할 때는 list() 함수를 사용하면 된다.
list() 함수 안에 키 = 값 형태로 객체를 나열하여 저장하면 된다.
그냥 벡터들을 나열하여 리스트를 생성할 수도 있는데, 그러면 키가 없이 저장되게 된다.
 

리스트의 특정 객체를 조회할 때는 벡터에서 원소를 추출하는 방식과 동일하게 인덱스 번호를 활용하여 조회할 수 있다.
리스트 이름[인덱스 번호] 형식으로 작성하면 인덱스 번호에 해당하는 객체를 조회할 수 있다.
또는 리스트 이름["키"] 형식으로 작성하여 해당 키의 객체를 조회할 수도 있다.
위 두 방법으로 리스트를 조회하면 리스트의 형태로 결과가 반환된다.
 
리스트 이름[[인덱스 번호]] 형식이나 리스트 이름$키 형식으로도 객체를 조회할 수 있는데, 해당 방법으로 객체를 조회하게 되면 데이터 벡터(character) 형태로 결과가 반환된다.
 

리스트에 항목을 추가할 때는 항목을 추가할 키를 생성하고 항목을 넣어주면 된다.
리스트를 조회하는 방법을 활용해 항목을 추가할 객체를 선택하거나 새로 생성하고 항목을 넣어주면 된다.
 

리스트 객체의 데이터를 변경할 수도 있습니다.
이 또한 리스트를 조회하는 방법을 활용하여 데이터를 변경할 객체를 선택하고 값을 변경해 주면 됩니다.
 

리스트의 키 이름을 확인할 때는 벡터에서도 사용한 names() 함수를 사용하면 된다.
names() 함수 안에 키 이름을 확인할 리스트의 이름을 적어주면 된다.
names() 함수의 결과 형태를 보면 벡터 형태로 나오는 것을 확인할 수 있다.
이것을 활용하여 리스트 요소의 key 이름을 새로 부여해 줄 수도 있고, key 이름을 변경할 수도 있다.
 

리스트에서 특정 항목을 삭제할 수도 있다.
항목을 삭제할 때는 삭제할 객체를 불러와 해당 값을 NULL로 변경해 주면 된다.
 

여러 리스트를 하나의 리스트로 합칠 수도 있는데, 리스트를 합칠 때에는 c() 함수를 사용한다.
c() 함수 안에 합칠 리스트를 나열하면 나열할 리스트를 하나로 합칠 수 있다.
 

리스트의 크기를 확인할 때는 length() 함수를 사용한다.
length() 함수 안에 크기를 확인할 리스트를 넣어주면 해당 리스트의 크기를 확인할 수 있다.
리스트의 크기는 리스트 안의 객체의 개수이다.
 

unlist() 함수는 리스트를 벡터로 만드는 함수이다.
unlist() 함수 안에 리스트를 넣으면 해당 리스트의 각 객체가 분리된다.
unlist() 함수로 분리되면 그 형태가 벡터로 바뀌므로 $ 기호를 사용하여 객체를 조회하는 것은 불가능하게 된다.

728x90
반응형