관리 메뉴

IT journey

R-데이터 유형과 객체 간략히 살펴보기 본문

개인공부공간/R

R-데이터 유형과 객체 간략히 살펴보기

step 2021. 6. 2. 22:25
728x90
반응형

변수명

알파벳, 숫자, _, .로 구성되어있으며 만들 때에는 숫자나.으로 시작해서는 안됩니다.

변수값을 할당(데이터를 입력)할 때에는 <-나 = 를 씁니다.

 

데이터 유형

숫자형(numeric), 문자형(character), 논리형(logical) 등등 이 있습니다.

데이터 객체

데이터를 입력할 때는 함수 c()를 이용합니다.

객체는 R의 기본요소이며, R에서 다뤄지는 모든 것이 객체입니다.

벡터

스칼라

  • R에서는 기본 데이터 타입은 벡터입니다. 그러므로 스칼라 데이터는 길이가 1인 벡터로 생각하면 됩니다.
  • 1차원 값(1,2,...), NULL(초기화 되지 않은 변수), NA(Not Available, 데이터 값이 없음(즉, 결측치), 문자열, 진리 값, 팩터가 길이가 1인 벡터인 스칼라라고 생각하면 됩니다.
  • 이에 대한 예는 아래와 같습니다.
a<-2
a

참고로, 문자열(character)은 '', ""로 묶은 문자를 말합니다. 

진리 값(logical, 논리형)을 들어가기 전 논리 연산자를 다루었던 Python-자료형(리스트, 튜플)과 C언어-연산자 포스팅 글을 미리 보고 오시면 이해를 수월하게 하실 수 있습니다.😊

진리 값은 TRUE와 FALSE로 &,|,! 는 Python-자료형(리스트, 튜플)에서 처럼 &는 and 로 |는 or로! 는 not으로 연산할 수 있으며 &,|,! 는 진리값이 지정된 벡터 단위로 연산을 합니다.

그리고 &&, || 는 C언어-연산자 처럼 연산할 수 있으며 두 개의 진리값끼리 연산하기 위한 연산자입니다.

이에 대한 예는 아래와 같습니다.

c(TRUE,TRUE) & c(FALSE,TRUE)
c(TRUE,TRUE) && c(FALSE,TRUE)

벡터(1차원으로 배열된 구조)

- 한 데이터 유형으로 여러 개의 데이터를 저장한 구조입니다.

- 벡터 내부에 또 다른 벡터를 생성하게 되면 1차원의 벡터로 변경됩니다.

- 벡터의 각 데이터마다 이름 부여를 하고 색인을 이용해서 접근합니다.

- 데이터를 입력할 때는 함수 c()를 이용합니다.

- names() 함수를 이용하여 벡터의 이름을 부여합니다.

- 데이터 변환 규칙은 integer <double <character <list로 됩니다.

- 벡터의 구성요소를 구할 때는 typeof()를 씁니다.

- 벡터의 길이(벡터를 구성하고 있는 요소 개수)를 구할 때는 length 함수를 씁니다. 

- 벡터의 인덱싱(Indexing)

파이썬에서는 0부터 수를 셌습니다. 하지만, R에서는 1부터 수를 셉니다.

일부분을 선택하여 가져오는 방법은 x[a]의 형태이며 정수형 벡터에 의한 인덱싱을 주의해서 하여야 합니다. 모두 양수이게 되면 지정된 위치의 자료 선택하지만 모두 음수의 경우에는 지정된 위치의 자료가 제외됩니다.

 

위에 대한 설명에 대한 예는 아래와 같습니다.

x<-c(FALSE,TRUE,TRUE) #논리형으로만 이루어진 백터
typeof(x) #벡터의 구성요소
y<-c(1L,5L,3L) #정수형으로만 이루어진 벡터*
names(y)<-c("one","two","three")
y
z<-c("a","b",c("a","b"))
length(z) #벡터의 길이

#인덱싱
ex <- c(4,8,12,16,20)
ex[c(1,3)]
ex[c(1,1,1)] #같은 위치 반복 지정 가능
ex[6] #지정한 위치가 벡터 길이보다 큰 경우
#참고로, 논리형 벡터에 의한 인덱싱도 가능합니다.
#TRUE가 있는 위치의 자료를 선택하며, 이것은 벡터가 비교에 의한 자료 선택에서 쓰입니다.
ex <- c(4,8,12,16,20)
ex[c(FALSE,TRUE,FALSE,TRUE,TRUE)]

요인

요인(factor)은 크게 4가지로 나누어집니다.

범주형 데이터를 표현하는 구조로 1차원 구조입니다.

  • 범주형은 데이터를 미리 정해진 유형(레벨)로 분류를 합니다. 그에 대한 예로는 성별로 남자, 여자로 나누어집니다.
  • 명목형은 데이터 간 크기 비교가 불가능한 경우를 말합니다.
  • 순서형은 데이터 간 순서를 둘 수 있는 경우를 말합니다. 그에 대한 예로는 A, B, C, D, F학점을 말합니다.
  • 수치형은 데이터를 숫자로 표현합니다.

이에 대한 예는 아래와 같습니다.

#범주형
result=factor("여자",c("남자","여자"))
result
nlevels(result) #level의 개수

#순서형
ordered("A",c("A","B","C","D","F"))

행렬(Martix)

-행과 열에 대해 알아봅시다.

- 행렬은 2차원 구조로 1차원 구조인 벡터에 dim(차원) 속성이 추가됩니다.

- 행렬의 구성요소는 같은 유형의 데이터로만 이루어져 있습니다.

- 행렬을 생성하는 방법은 2가지가 있습니다.

 ㉮ 행렬 matrix()를 이용하여 행과 열의 개수 nrow= 또는 ncol= 로 지정합니다.

 지정하게 되면 자료는 열 기준으로 입력하기 때문에, 자료를 행 단위로 입력하기를 원한다면 옵션인 byrow=TRUE를 추가해야 합니다. byrow=FALSE로 하게 되면 열 기준으로 입력합니다. 

 ㉯ 함수 dim()을 이용하면 됩니다.

- 행에 이름을 붙이고 싶을 때에는 rownames 함수를 쓰고 열에 이름을 붙이고 싶을 때에는 colnames 함수를 쓰면 됩니다.

- 각각의 차원에 해당하는 이름을 부여해주고 싶을 때에는 dinames을 쓰면 됩니다.

- 인덱싱은 3가지 방식 중 원하는 것을 선택해서 해주면 됩니다.

x[i,j] => 행렬 x의 i번째 행, j번째 열의 요소를 호출

㉯ x[i,] => 행렬 x의 i번째 행 전체 요소를 호출

㉰ x[,j] => 행렬 x의 j번째 열 전체 요소를 호출

- 위 설명과 관련된 예는 아래와 같습니다.

a=matrix(1:6,nrow=2,ncol=3)
a
b=matrix(1:6,nrow=2,ncol=3,byrow=TRUE)
b
rownames(a)<-c("one","two")
colnames(b)<-c("1","2","3")
ab=1:6
dim(ab)<-c(2,3)
dimnames(ab)<-list(c("one","two"),c("1","2","3"))
ab
ab[1,2]
ab[1,]
ab[,2]
ab[,1:2]

배열(array)

- 2차원 이상의 구조로, 구성요소는 같은 유형의 데이터입니다.

- 배열은 함수 array()와 함수 c()로 만듭니다.

- 각각의 차원에 해당하는 이름을 부여해주고 싶을 때에는 dinames을 쓰면 됩니다.

- 배열을 인덱싱을 할 때에는 차원의 수만큼의 첨자가 필요합니다.

- 위 설명과 관련된 예는 아래와 같습니다.

a=array(1:12,c(2,3,2))
a
dimnames(a)<-list(x=c("x1","x2"),y=c("y1","y2","y3"),z=c("z1","z2"))
a
a[,1,1]
a

데이터 프레임(Data Frame)

- 통계 데이터 세트에 가장 적합한 구조입니다.

- 표(행렬과 같은 2차원 구조) 형태로 저장 관리합니다.

- 하나의 열에는 같은 유형의 자료를 입력해야 하며 각각의 열에는 서로 다른 유형의 자료가 올 수 있습니다. 또한 각 열에는 관측값들을 저장하고 각 행에는 관측 단위 값을 저장해야 합니다.

- 데이터 프레임의 생성하려면 함수.data.frame()를 해야합니다.

- 데이터 구조를 확인하려면 str()를 해주어야 합니다.

- 데이터 프레임의 행 이름 변수 개수 확인하는 방법은 rownames()로, 열 이름 변수 개수 확인하는 방법은

함수 colnames(), names()를 써야 합니다.

- 열의 자료는 변수를 나타내며 이는 variable이라 불립니다.

- 변수의 개수를 확인하는 방법은 함수 length()입니다.

- 인덱싱에 대해 알아봅시다.

㉮ 열(변수) 선택

  • df[[a]] 또는 df[a]의 형식은 벡터 a는 숫자형 혹은 문자형
  • df[[a]] 의 형식은 한 변수의 선택하고 결과는 벡터
  • df[a] 형식은 하나 또는 그 이상의 변수 선택하고 결과는 데이터 프레임

열(변수)선택은 벡터 형태로 선택하는 것이 일반적이며 df[[a]]의 형태가 더 많이 쓰입니다.

조금 더 활용하기 편한 방법은 $ 기호 사용하여 데이터 프레임의 이름$변수이름 으로 쓰입니다.

㉯ 행렬의 인덱싱 방법 사용

df[i,j]의 형태로, 선택된 변수가 하나이면 결과는 벡터이지만 

선택된 변수가 하나 이상이면 결과는 데이터 프레임으로 나옵니다.

df1 = data.frame(x=c(5,10,15),y=c("a","b","c"))
df1
#입력된 문자열 벡터를 요인으로 변화시켜줍니다.
#요인은 level이 있는 순서형 척도로 활용이 가능했던 데이터입니다.
str(df1)

#문자열 벡터를 요인으로 변화하기 싫다면 함수 내에 stringsAsFactors=FALSE를 입력해주면 됩니다.
df2<-data.frame(x=c(5,10,15),y=c("a","b","c"),stringAsFactors=FALSE)
str(df2)

df3<-data.frame(a=c(5,6,7),b=c("x","y","z"))
df3
#열(변수) 선택
df3[1]
df3[[1]]
df3["a"]
df3[["a"]] #df3$a
#행렬의 인덱싱 방법 사용
df3[c(1,2),1]
df3[c(1,2),]

colnames(df3)
length(df3)

리스트(list)

- 가장 포괄적인 구조로 구성 요소(벡터, 배열, 데이터 프레임, 함수, 다른 리스트)는 서로 다른 데이터 타입의 데이터들이 연결되어 있는 구조입니다.

-데이터가 (key,value)의 구조로 저장되어 있습니다.

- 함수 list()를 이용해서 리스트를 생성하고 이름을 부여합니다.

- 리스트의 인덱싱은 

  • list [[a]] : list라는 리스트 a번째 값
  • list[a] : list라는 리스트의 a번째 데이터 리스트
  • list$a : list라는 리스트안에 a라는 필드의 값 참조

로 쓸 수 있습니다.

- 리스트의 장점으로는 산만하게 흩어진 정보를 간단히 묶기가 가능가 가능합니다.

많은 R 함수들의 수행결과가 리스트의 형태라 용이합니다. 리스트를 가지고 원하는 결과만 인덱싱해서 사용할 수 있습니다.

x<-list(a=c("one","two","three"),b=4:6,c=list(7:11),d=data.frame(x1=c("s1","s2"),x2=12:13))
x
x[1]
x[[1]]
str(x[1])
str(x[[1]])

#리스트 x의 3번째 요소를 데이터 프레임의 형태로 선택
x[[3]]
x[["c"]]
x$c

#리스트 x의 4번째 요소의 두번째 열을 데이터 프레임의 형태로 선택
x[[4]][2]

#리스트 x의 4번재 요소의 두 번째 열을 벡터 형태로 선택
x[[4]][[2]]
x$d$x2

몇 개의 유틸리티 함수만 다루어보겠습니다.

- head() : 데이터 앞 부분을 참조합니다.

- tail() : 데이터 뒤 부분을 참조합니다.

 

내장 데이터와 유틸리티 함수를 이용해보는 예를 만들어보겠습니다.

base 패키지 중 하나인 datasets에 데이터 프레임 iris가 있습니다.

(1)그 데이터를 구성하고 있는 변수와 관찰값의 개수를 확인하고 변수의 이름을 확인하는 예

(2) 함수 head()와 tail()를 이용하여 데이터 프레임 iris의 처음 세줄과 마지막 세줄을 출력하는 예

iris
str(iris)
colnames(iris)
head(iris,3)
tail(iris,3)
728x90
반응형

'개인공부공간 > R' 카테고리의 다른 글

R-데이터 프레임  (4) 2021.06.04
R-벡터,행렬  (6) 2021.06.03
Comments