지난번 포스팅에서는 파이썬에서 단일 데이터를 다루는 자료형인 숫자와 문자열에 대해서 알아보았습니다. 


파이썬에는 다수의 데이터를 다룰 수 있는 자료형으로 리스트(List), 튜플(Tuple), 사전(Dictionary) 자료형이 있습니다.  

이번 포스팅에서는 이중에서 리스트(List) 자료형에 대해서 알아보겠습니다. 


리스트(List) 자료형은 다수 데이터가 서로 다른 형태의 자료여도 되며, 변경 가능하다는 점 때문에 데이터 분석에서 정말 많이 사용는 만큼, 정말 중요한 자료형입니다.  (↔ 튜플은 자료 갱신이 안됨)


리스트(List)는 대괄호(square brackets, [ ]) 을 사용해서 자료값을 감싸주고, 대괄호 안의 다수의 값들은 콤마(comma)로 구분을 해줍니다. 



[ 파이썬의 5가지 자료형 (Python's 5 Data Types) ]





먼저 리스트 생성, 삭제, 인덱싱 및 슬라이싱, 기본 연산자를 소개하고, 리스트를 다루는 내장 함수와 메소드는 다음번에 나누어서 설명하겠습니다. 



 1. 대괄호와 콤마로 리스트 생성 (creating a list with square brackets and comma separation)


리스트 안에 문자열, 정수, 부동소수형, 리스트, 튜플 등 다양한 형태의 자료들이 들어갈 수 있으며, 콤마로 구분해주고, 대괄호로 감싸줍니다.  



# List : contains items separated by commas and enclosed within square brackets([])

>>> list_1 = ['abc', 123, 3.14, ['edf', 456], ('gh', 'st')]

>>> list_1

['abc', 123, 3.14, ['edf', 456], ('gh', 'st')]

 




  2. 리스트 삭제 (Deleting a list) : del



>>> list_1 = ['abc', 123, 3.14, ['edf', 456], ('gh', 'st')]

>>> list_1

['abc', 123, 3.14, ['edf', 456], ('gh', 'st')]

>>> 

>>> del list_1

>>> list_1

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

NameError: name 'list_1' is not defined

 




  3. 리스트 안의 특정 위치의 값을 새로운 값으로 갱신 (Updating a list) : list[index] = value



>>> list_1

['abc', 123, 3.14, ['edf', 456], ('gh', 'st')]

>>> list_1[1]

123

>>> list_1[1] = 111

>>> list_1

['abc', 111, 3.14, ['edf', 456], ('gh', 'st')]

 




  4. 리스트 인덱싱, 슬라이싱 (Indexing, Slicing a list)


리스트도 순서열(sequences)이므로, 문자열에서 사용했던 방법과 동일하게 인덱싱, 슬라이싱(indexing, slicing)이 가능합니다. 첫번째 자리는 '0'부터 인덱싱이 시작합니다. (R은 '1'부터 시작하므로 혼동하지 않도록 주의 요함)



# the slice operator : [:] with indexes starting at 0 in the beginning of the list

>>> list_1 = ['abc', 123, 3.14, ['edf', 456], ('gh', 'st')]

>>> list_1

['abc', 123, 3.14, ['edf', 456], ('gh', 'st')]

>>> 

>>> list_1[0]

'abc'

>>> list_1[0:3]

['abc', 123, 3.14]

>>> list_1[3:]

[['edf', 456], ('gh', 'st')]

 



마이너스 부호('-')를 붙여주면 뒤에서부터 인덱싱(indexing)이 시작합니다. 



>>> list_1 = ['abc', 123, 3.14, ['edf', 456], ('gh', 'st')]

>>> list_1

['abc', 123, 3.14, ['edf', 456], ('gh', 'st')]

>>> 

>>> list_1[-1] # indexing starting from the last using '-1' : minus (-) sign

('gh', 'st')

>>> list_1[-3:-1]

[3.14, ['edf', 456]]

 




  5. 리스트 기본 연산자 (Basic List Operations)


리스트의 기본 연산자(basic list operations)에는 리스트 길이는 재는 len() 함수, 리스트를 합치는 + 연산자, 리스트 값을 반복하는 * 연산자, 소속 여부 블리언값(True, False)을 반환하는 in 연산자, 함수를 반복하는데 사용하는 for loop 문 등이 있습니다. 


[ 리스트 기본 연산자 (basic list operations) ]


설명 (description)

파이썬 표현 (python expression)

결과 (results)

 리스트 길이 (length)

 len([1, 2, 3])

 3

 리스트 합치기 (concatenation)

 [1, 2, 3] + [4, 5, 6]

 [1, 2, 3, 4, 5, 6]

 반복 (repetition)

 [1, 2, 3]*3

 [1, 2, 3, 1, 2, 3, 1, 2, 3]

 소속 여부 (membership)

 1 in [1, 2, 3]

4 in [1, 2, 3]

 True

 False

 for loop 반복 (iteration)

 for x in [1, 2, 3]: print (x);

 1 

 2 

 3 




다음번 포스팅에서는 리스트 내장 함수 및 메소드(Python List built-in functions and methods)에 대해서 알아보겠습니다. 


많은 도움이 되었기를 바랍니다. 


이번 포스팅이 도움이 되었다면 아래의 '공감~'를 꾸욱 눌러주세요. ^^



Posted by R Friend R_Friend

댓글을 달아 주세요

이번 포스팅에서는 파이썬의 5가지 자료 구조, 변수 유형에 대해서 간략하게 알아보겠습니다. 


몇 년을 SAS 사용하다가 R 을 배우기 시작했을 때 R의 자료 구조가 좀 낯설었는데요, R 사용하다가 Python 배우기 시작하니 또 좀 생소하더군요. 처음엔 낯설어도 자꾸 사용하다보면 또 금새 익숙해지니 너무 부담갖지는 마시구요.


무슨 언어를 사용하던지 자료 유형(Data Type)에 대해서 정확하게 알고 있는 것이 정말, 진짜로, 억수로, 무지막지하게 중요합니다.  가장 기본이 되는 것이라서 정확하게 숙지를 하고 있어야 합니다. 


파이썬의 자료 구조, 변수 유형에는 수(Number), 문자열(String), 리스트(List), 튜플(Tuple), 사전(Dictionary)의 5가지 유형이 있습니다.  이번 포스팅에서는 수(Number)와 문자열(String)을 먼저 살펴보겠습니다. 



[ 파이썬의 자료/변수 유형 (Python's 5 Data Types, Variable Types) ]





 (1) 수 (Numbers)

: 정수(integer), 실수(real number), 복소수 (complex number)


먼저 수 (Number) 인데요, 더 세부적으로 구분해보자면 파이썬이 지원하는 수에는 정수(Integer), 실수(Real Number), 복소수(Complex Nuber) 의 3가지가 있습니다.


(1-1) 정수 (Integer)


파이썬은 메모리가 허용하는 선에서 무한대의 정수를 사용할 수 있습니다.  

type() 함수로 자료유형을 확인할 수 있습니다. 


#%% (1) Numbers # (1-1) int : signed integers


In [1]: num_int = 100


In [2]: type(num_int)

Out[2]: int 




참고로, 파이썬이 제공하는 수에 대한 산술 연산자(arithmetic operators)에는 아래의 7가지가 있습니다.  연산자(operator) 기호는 기억해두면 편할텐데요, 나누기(division), 나눗셈의 몫(floor division), 나눗셈의 나머지(modulus) 가 항상 헷갈립니다. ^^;


연산자 (operator)

 설명

예 

 +

 더하기 (addition)

 5 + 2 = 7

 -

 빼기 (subtraction)

5 - 2 = 3 

 곱하기 (multiplication)

5 * 2 = 10

 /

나누기 (division) 

 5 / 2 = 2.5

 //

나눗셈의 몫 (floor division) 

 5 // 2 = 2

 %

나눗셈의 나머지 (modulus) 

5 % 2 = 1 

 **

지수 (exponent) 

5 ** 2 = 25



파이썬은 수를 2진수, 8진수, 16진수로 변환할 수 있는 함수를 제공합니다. 참고로, 컴퓨터가 정보를 처리하는 가장 단위가 '0'과 '1'로 구성된 비트(bit) 이고, 비트가 8개 모여서 바이트(byte)가 되는데요, 1 바이트로는 0 ~ 255 (2^8 -1 개) 개의 수를 표현할 수 있습니다.


아래 표에 10진수 10을 각 2진수, 8진수, 16진수로 변환해 보았습니다.


진법별로 변환해주는 함수 (function)

 접두사 (prefix)

예 

2진수(Binary number)로 변환: bin()

 0b

In [26]: bin(10)

Out[26]: '0b1010'

8진수(Octal number)로 변환: oct()

 0o

 In [27]: oct(10)

Out[27]: '0o12'

 16진수(Hexadecimal number)로 변환: hex()

 0x

 In [28]: hex(10)

Out[28]: '0xa'



(1-2) 실수 (Real Number): 부동 소수형


파이썬은 실수를 지원하기 위해 소수점이 있는 부동 소수형(floating point real values)을 제공합니다. 



# (1-2) float : floating point arithmetic

In [3]: num_float = 12.345


In [4]: type(num_float)

Out[4]: float 




파이썬이 정수는 메모리가 허용하는 한 무한대로 저장, 처리할 수 있다고 했는데요, 부동 소수형은 저장공간을 효율적으로 사용하기 위해 8 바이트만 사용해서 소수를 저장, 표현하므로 정도밀에 한계가 있습니다. 부동 소수형 수를 가지고 계산을 하다보면 끝자리 수가 미묘하게 예상했던 것과 다른 결과가 나오는 경우가 있으므로 정밀한 계산을 요구하는 경우에는 주의를 해야 합니다. 


수학에서 가장 많이 사용되는 무리수, 무한소수인 원주율(ratio of circumference of circle to its diameter ""

3.141592653589793238462...)과 자연상수(The mathematical constant "e", 2.71828182845904523536...)를 파이썬의 math 모듈을 사용해서 표현해 보겠습니다. 부동 소수형으로 표현되어 자리 수가 제한되어 있음을 확인할 수 있습니다. 



In [5]: import math


In [6]: math.pi

Out[6]: 3.141592653589793


In [7]: math.e

Out[7]: 2.718281828459045 




(1-3) 복소수 (Complex Number): 실수(Real Number) + 허수(Imaginary Number: j)


복소수는 실수(real number)와 허수(imaginary number, i)로 구성된 수입니다. 고등학교 때 배워서 기억이 좀 가물가물할 수도 있는데요, (a, b는 실수, i는 허수) 형태로 표현하고, 이때 허수 i 는 인 수입니다. 


파이썬에서는 허수를 i로 표기하는 대신에 j 로 표기합니다. 



# (1-4) complex : complex numbers

In [8]: num_complex = 3 + 0.45j


In [9]: type(num_complex)

Out[9]: complex


In [10]: num_complex.real

Out[10]: 3.0


In [11]: num_complex.imag

Out[11]: 0.45




복소수도 산술연산을 할 수 있는데요, 아래에 덧셈(+) 연산 예를 들어보았습니다. 



In [12]: num_complex_2 = num_complex + (1 + 2j)


In [13]: num_complex_2

Out[13]: (4+2.45j)

 

# delete number objects

In [14]: del num_int, num_float, num_complex, num_complex_2





 (2) 문자열 (String) 


(2-1) 문자열 생성 : ' ', " ", ''' ''', """ """


파이썬이 제공하는 자료형의 두번째로는 문자들이 가지런히 늘어서 있는 집합인 문자열(String)이 있습니다. 작은 따옴표('xx')나 큰 따옴표 ("xx")로 감싸서 표현합니다.



In [14]: str_1 = 'Hello World'


In [15]: str_1

Out[24]: 'Hello World'


In [16]: type(str_1)

Out[16]: str 




줄을 바꾸어서 여러개의 줄로 문자열을 표현해야 하는 경우에는 작은 따옴표 3개('''xx''') 또는 큰 따옴표 3개(""xx""")를 이용해서 표현합니다. 가령, 여러 줄의 SQL query를 DB connect해서 사용하는 경우에 작은 따옴표 3개를 사용하면 되겠습니다.



In [17]: mysql_Query = """SELECT var1, count(*) as cnt

    ...: FROM mytable

    ...: WHERE var1 = 'aaa'

    ...: GROUP BY var1

    ...: ORDER BY var1"""


In [18]: mysql_Query

Out[18]: "SELECT var1, count(*) as cnt\n FROM mytable\n WHERE var1 = 'aaa'\n GROUP BY var1\n ORDER BY var1"

 



(2-2) 문자열 분리 (slicing of a string) : [ ], [ : ]


문자열은 순서열(sequence) 형식으로서 [ ], [ : ] 와 같은 슬라이싱 연산자(slice operator) 를 사용해서 문자열의 일부분을 분리할 수 있습니다. R 사용하다가 파이썬의 슬라이싱 사용하려면 R과 파이썬이 슬라이싱 시작하는 위치, 끝나는 위치가 달라서 무척 헷갈립니다. ^^;


'Hello World' 문자열을 가지고 Python 으로 슬라이싱 하는 것과 동일한 결과를 얻기 위해서 R 로 subset() 함수를 사용해서 문자열 분리하는 예를 아래에 비교해보았습니다.


Python 

 

In [19]: a = 'Hello World'


In [20]: print(a)

Hello World


 > # subset of string using R

> a <- c('Hello World')

> a

[1] "Hello World"

# [] and [:] : slice operator with indexes starting at 0

# in the beginning of the string

In [21]: a[1]

Out[21]: 'e'


> substr(a, 2, 2)

[1] "e" 
 

In [22]: a[1:4]

Out[22]: 'ell'


 > substr(a, 2, 4)

[1] "ell"

 

In [23]: a[1:]

Out[23]: 'ello World'


 > substr(a, 2, nchar(str))

[1] "ello World"

 

In [24]: a[10]

Out[24]: 'd'


# final character of a string : string[-1]

In [25]: a[-1]

Out[25]: 'd'


> substr(a, 11, 11)

[1] "d"


 > substr(a, nchar(str), nchar(str))

[1] "d"


Python의 경우 string[-1] 이면 제일 마지막 위치에서 첫번째 문자를 슬라이싱 해오며, string[-2]이면 제일 마지막에서 두번째 문자를 슬라이싱 해옵니다. (R에서 indexing 할 때 '-1'을 사용하면 첫번째 객체를 삭제해버립니다. 완전 당황하는 수가 있어요. 겪어본 사람은 알지요... ㅋㅋ)



[ 문자열 슬라이싱의 시작과 끝 위치: Python vs. R 비교 ]




(2-3) 문자열 합치기 (concatenation of two strings) : +



# plus (+) sign: the string concatenation operator

In [26]: a + ' I Love You'

Out[26]: 'Hello World I Love You'

 




(2-4) 문자열 반복하기 (repetition of a string): *



# asterisk(*) : the repetition operator

In [27]: a*2

Out[27]: 'Hello WorldHello World'

 



다음번 포스팅에서는 문자열(string)이 자체적으로 가지고 있는 함수인 다양한 메소드(methods)에 대해서 알아보겠습니다.


많은 도움이 되었기를 바랍니다.

이번 포스팅이 도움이 되었다면 아래의 '공감~'를 꾸욱 눌러주세요. ^^



Posted by R Friend R_Friend

댓글을 달아 주세요


SAS나 SPSS를 사용하다가 R을 처음 배우는 사용자라면 R에서 7개로 나누는 데이터 구조에 대해서 '이걸 왜 배우지? SAS나 SPSS는 이런거 모르고도 아무 문제 없이 데이터 처리, 분석 다 했었는데...'라는 의문과 함께, 'R 이거 배우기 어렵네...'라고 푸념할 수도 있겠습니다. 제가 그랬거든요. (SAS나 SPSS에서 주로 사용했던 데이터 구조가 R의 데이터 구조 중에서는 '데이터 프레임' or '행렬'이라고 하는 구조라고 생각하시면 됩니다. 전부다는 아니고 많은 경우....)


R의 데이터 구조별 특성에 대해서 정확하게 이해하지 않으면 나중에 데이터 처리, 분석 넘어갔을 때 자꾸 헷갈리고, 에러가 났을 때 에러 메시지가 무슨 의미인지 이해를 못할 가능성이 높습니다. 데이터 구조에 따라서 분석기법이 달라지게 되거든요. 라틴댄스로 치자면 빨리 '패턴' 배워서 멋지게 파트너와 춤추고 싶은데 선생님은 한달이고 두달이고 '스탭'만 연습시키는데요, 어찌보면 따분하고 답답한 '스탭' 기본기가 R로 치면 데이터 구조라고 생각하시면 되겠습니다. R의 기본이 되는 중요한 개념이므로, 그리고 나중에 이게 제대로 이해가 되고 R이 손에 익었다 싶을 때 다시 되돌아 보면 R에서 데이터 구조를 이렇게 나누어서 분석 기법을 달리 하는 것이 R의 차별화된 장점이자 특징이겠구나 하고 느끼게 되는 시점이 올겁니다. 


R 데이터 구조는 (1) 스칼라, (2) 벡터, (3) 요인, (4) 행렬, (5) 배열, (6) 데이터프레임, (7) 리스트의 7개로 나눌 수 있습니다. 하나씩 설명을 할텐데요, 처음에 잘 이해가 안가도 자꾸 R 사용하면서 다시 이번 포스팅 다시 돌아와서 한번씩 복습하시면 이해되는 날이 올거예요. (제가 Coursera로 강의 듣는데 R 데이터 구조라면서 강사가 막 영어로 뭐라 뭐라 하는데.... 뭔 소리인지 이해도 안되고, 이걸 왜 배우나 싶고, 짜증도 나고, 좌절도 되고...암튼 그랬는데요, 어느 순간 지나서 보니깐 다 이해를 하고 있더라고요. 한번 보고서 이해 안된다고 좌절하지 마시라는 뜻에서 자꾸 같은 소리 하고 있습니다. ^^;;;)



1. 스칼라 (Scala)


구성인자가 하나인 벡터를 말합니다. 


> # 스칼라 (Scala) : 구성인자가 1개인 벡터

> s1 <- c(1)

> s2 <- c("Kim") 



2. 벡터 (Vector)


벡터는 동일한 유형의 데이터가 구성인자가 1개 이상이면서 1차원으로 구성되어 있는 데이터 구조를 말합니다. 

(벡터 중에서 구성인자가 1개인 것을 '스칼라'라고 합니다)


> # Vector

> v1 <- c(1, 2, 3)                   # 숫자형 벡터

> v2 <- c("Kim", "Lee", "Choi")    # 문자형 벡터

> v3 <- c(TRUE, TRUE, FALSE)   # 논리형 벡터



3. 요인 (Factor) 


범주형(명목형 또는 순서형)의 데이터 구조를 요인(Factor)라고 합니다. 통계 분석 할 때 소위 '~~별' 분석을 할 때 쓰는게 요인이므로 굉장히 많이 사용됩니다. 나중에 분석을 하다보면 (1) '요인'으로 데이터를 변환해야 하는 경우도 생기고, (2) 반대로 '요인'이 아니어야 하는데 '요인'으로 데이터가 입력이 되어있어서 에러가 발생하는 경우도 생기곤 합니다. '요인'이 뭔지, 뭐에 쓰는 것인지 모르면 두 가지 경우 상황 파악을 못해서 곤혹스럽겠지요? 

요인이 가질 수 있는 값들을 '수준(level)'이라고 합니다. RDBMS에서의 '코드값'이라고 이해하면 되겠습니다. 수준(level)은 명목형은 상관없지만, 순서형의 경우 순서(order)를 부여할 수 있습니다. 분석 결과가 순서대로 범주화 되서 나와야 보기에 좋겠지요?


> # (1) 문자형 데이터를 그냥 입력하면, 따옴표가 있는 문자형 벡터가 생성

> f1 <- c("Middle", "Low", "High")

> f1

[1] "Middle" "Low"    "High"  

>

> # (2) factor()함수를 이용해서 문자형 벡터를 요인(factor)로 변환

> # 단, 순서를 지정 안해주면 알파벳 순서로 수준(level)이 자동으로 지정됨

> f2 <- factor(f1)

> f2

[1] Middle Low    High  

Levels: High Low Middle

>

> # (3) 수준(level)에 순서를 부여하려면 'order=TRUE' 옵션 설정, level=c("") 에 순서대로 입력

> f3 <- factor(f2, order = TRUE, level = c("Low", "Middle", "High"))

> f3

[1] Middle Low    High  

Levels: Low < Middle < High 



4. 행렬 (Matrix) 


행렬은 동일한 유형의 2차원 데이터 구조를 말합니다. (쉽게 말해 m x n 형태의 표 형태의 데이터)

참고로, 벡터는 동일한 유형의 1차원 데이터 구조라고 했지요. (쉽게 말해, 가로로 늘어선 한 줄 데이터)


행렬은 matrix() 라는 함수를 사용합니다. 

최적화(optimization) 할 때 제약조건을 행렬로 입력합니다. 공학에서 행렬 많이 사용합니다. 


> # 1~12까지의 숫자를 행(row)의 수가 4개인 행렬로 만들어라

> m1 <- matrix(1:12, nrow=4)

> m1

     [,1] [,2] [,3]

[1,]    1    5    9

[2,]    2    6   10

[3,]    3    7   11

[4,]    4    8   12

> # 1~12까지의 숫자를 행(row)의 수가 4개이고 행렬로 만드는데, 행 기준(byrow=TRUE)으로 채워나가라

> m2 <- matrix(1:12, nrow=4, byrow=TRUE)

> m2

     [,1] [,2] [,3]

[1,]    1    2    3

[2,]    4    5    6

[3,]    7    8    9

[4,]   10   11   12

>  



5. 배열 (Array) 


배열(Array)은 동일한 유형의 데이터가 2차원 이상으로 구성된 구조를 말합니다. 

참고로, 행렬은 동일한 유형의 2차원 데이터 구조라고 했지요. 따라서 배열은 쉽게 말해 행렬이라는 방을 층 층이 쌓아놓은 아파트라고 생각하시면 되겠습니다. 


> # 1~24까지의 숫자를 '2 x 3 행렬'로 해서 '4층' 짜리의 데이터 구조를 만들어라

> a1 <- array(1:24, c(2,3,4))

> a1

, , 1


     [,1] [,2] [,3]

[1,]    1    3    5

[2,]    2    4    6


, , 2


     [,1] [,2] [,3]

[1,]    7    9   11

[2,]    8   10   12


, , 3


     [,1] [,2] [,3]

[1,]   13   15   17

[2,]   14   16   18


, , 4


     [,1] [,2] [,3]

[1,]   19   21   23

[2,]   20   22   24 



> # 1~24까지의 숫자를 '3 x 4' 행렬로 해서 '2층'짜리의 데이터 구조를 만들어라

> a2 <- array(1:23, c(3,4,2))

> a2

, , 1


     [,1] [,2] [,3] [,4]

[1,]    1    4    7   10

[2,]    2    5    8   11

[3,]    3    6    9   12


, , 2


     [,1] [,2] [,3] [,4]

[1,]   13   16   19   22

[2,]   14   17   20   23

[3,]   15   18   21    1





6. 데이터 프레임 (Data Frame) 


데이터 프레임데이터 유형에 상관없이 2차원 형태의 데이터 구조를 말합니다. 

참고로, 행렬동일한 유형의 데이터가 2차원 형태로 구성되었다고 했지요. 

통계, 마이닝 분석할 때 데이터 프레임을 주로 사용합니다. 


> # 다른 유형의 벡터 생성

> d1 <- c(1,2,3,4)

> d2 <- c("Kim", "Lee", "Choi", "Park")

> # 데이터 프레임으로 묶기 : data.frame() 함수 사용

> d3 <- data.frame(cust_id = d1, last_name = d2)  # 변수명 부여

> d3

  cust_id last_name

1       1       Kim

2       2       Lee

3       3      Choi

4       4      Park 



7. 리스트 (List) 


리스트는 벡터, 행렬, 배열, 데이터 프레임 등과 같은 서로 다른 구조의 데이터를 모두 묶은 객체를 말합니다. 

참고로, 리스트 말고 나머지들은 서로 다른 구조의 데이터 끼리는 묶어 놓지 않았고 따로 따로 였지요. 

R에서는 통계 분석 결과가 보통 리스트 구조로 제시되고, 필요로 하는 통계량이 있으면 indexing해서 뽑아서 쓰기도 합니다. 

서로 다른 구조의 다수의 데이터 객체를 개별로 따로 따로 관리하는 것보다는, 이것들을 리스트라는 한 바구니에 가지런히 정리해서 모아놓으면 관리하기에 편하겠지요? 


> # Vector(L1), Matrix(L2), Array(L3), Data Frame(L4)를 만들어서, 하나의 List(L5)로 묶어라

> L1 <- c(1, 2, 3, 4) # Vector

> L2 <- matrix(1:6, 3, byrow=TRUE) # Matrix

> L3 <- array(1:24, c(3,4,2)) # Array

> L4 <- data.frame(cust_id = c(1, 2, 3, 4), last_name = c("Kim", "Lee", "Choi", "Park")) # Data Frame

> L5 <- list(L1, L2, L3, L4) # List

>

> # [[1]]는 Vector(L1), [[2]]는 Matrix(L2), [[3]]는 Array(L3), [[4]]는 Data Frame(L4)가 묶인 것임

> L5

[[1]]

[1] 1 2 3 4


[[2]]

     [,1] [,2]

[1,]    1    2

[2,]    3    4

[3,]    5    6


[[3]]

, , 1


     [,1] [,2] [,3] [,4]

[1,]    1    4    7   10

[2,]    2    5    8   11

[3,]    3    6    9   12


, , 2


     [,1] [,2] [,3] [,4]

[1,]   13   16   19   22

[2,]   14   17   20   23

[3,]   15   18   21   24



[[4]]

  cust_id last_name

1       1       Kim

2       2       Lee

3       3      Choi

4       4      Park

 


지금까지 살펴본 R의 데이터 구조를 도식화하면 아래와 같습니다. 뭐가 뭐의 부분집한인지, 각 데이터 구조를 구분하는 기준은 무엇인지 유심히 다시 한번 살펴보기 정리해보면 좋겠습니다. 



[ R 데이터 구조 (Data Structure in R) ]



많은 도움 되었기를 바랍니다.

 

이번 포스팅이 도움이 되었다면 아래의 '공감 ~♡' 단추를 꾸욱 눌러주세요.^^


Posted by R Friend R_Friend

댓글을 달아 주세요

  1. ㅇㅇㅇ 2016.12.13 08:47  댓글주소  수정/삭제  댓글쓰기

    흐 어렵지만.. 조금씩 배우면 할 수 있겠죠

  2. 온봄 2017.03.27 12:25  댓글주소  수정/삭제  댓글쓰기

    그간 R을 전혀 R지못해서, 조금씩 R아가고 있는데요~
    선생님이 차근차근 정리해주신 내용들이 참 많은 도움이 되고 있습니다 ^^ 이해하기 쉽게 친절히 정리해주셔서 고맙습니다.

  3. r뻔 2017.04.12 18:55  댓글주소  수정/삭제  댓글쓰기

    코세라하면서 멍하니 막막해 하고 있었는데 한 줄기 단비 같은 정리 입니다. 이렇게 고급진 메뉴얼에 너무 감사드리고 앞으로도 많은 가르침 부탁 드립니다!!!!

  4. guest 2017.09.02 14:55  댓글주소  수정/삭제  댓글쓰기

    제가 지금까지 제가 설명 중에 가장 잘 정리되어있네요. 많이 도움받고 갑니다. 공부를 정말 열심히 하시나봐요.

  5. orange 2018.01.21 16:31  댓글주소  수정/삭제  댓글쓰기

    진짜 설명 기초부터 잘 해주셔서 많이 배우고 갑니다!!! 너무 감사드려요 ㅎㅎㅎ

  6. 감사합니다 2018.04.13 08:31  댓글주소  수정/삭제  댓글쓰기

    진짜 이렇게 깔끔한 순서와 친절한 설명이... 감사합니다!

  7. 감사합니다. 2018.04.15 22:12  댓글주소  수정/삭제  댓글쓰기

    감사합니다^^ 혹시 오프라인 강의도 하시나요?

  8. 박수환 2018.08.06 03:08  댓글주소  수정/삭제  댓글쓰기

    쌤, 진짜 막혀있던 혈이 풀리는 포스팅입니다 ㅜㅜ
    독학하다가 어딘가 알게 모르게 혼란에 빠지곤 했는데, 구조와 유형의 의미를 명확히 알게 되었습니다.
    이 포스팅은 정말 막힐때마다 와서 개념잡기용으로 다시 봐야겠어요.
    정말 감사합니다!!