R 데이터구조

노력을 즐기는 사람·2020년 9월 23일
0
post-thumbnail

이번 학기 교양으로 R을 배우게 됐다. 평소 파이썬을 자주 사용했었는데 R은 좀... 그렇다고 생각했다. 역시나 너무나 낯설어서 과제를 할 때 조금 헤맸다. 그래서 데이터구조에 대한 이해가 필요하다고 생각해서 정리를 한다.

데이터구조의 종류

  1. 벡터(vector)
  2. 배열(array)
  3. 리스트(list)
  4. 데이터프레임(dataframe)
  5. 등등
    하나씩 살펴보자

벡터(Vector)

벡터는 동일한 데이터 유형 의 단일 값들이 일차원적 으로 구성된 형태이다.

<예제>
x <- c(80, 85, 70)

여러개의 row를 가지고 있는 벡터는 동일한 데이터 유형이기 때문에 일괄적으로 연산자를 사용할 수 있다.

<예제>
x <- x + 5
[85, 90, 75]

벡터는 동일한 데이터 유형이기 때문에 c("A", 1, FALSE) , c(1, FALSE) 같이 서로 다른 데이터 유형을 사용하면 형변환이 발생한다.
벡터를 생성을 돕는 함수로는 req() , seq() , range() 등을 사용할 수 있다.

배열(array)과 행렬(matrix)

배열은 1차원 이상의 데이터로 구성되며 동일한 데이터 유형을 가진다. 1차원 배열은 벡터와 같고 2차원 배열은 행과 열로 이루어진다. 2차원이상으로 확장할 수 있다.

<예제>
x <- array(1:3, dim=c(3)) == x <- seq(1:3)
[1 2 3]
x <- array(1:6, dim=c(2,3)) == x<- matrix(1:6, nrow=2)

아래와 같은 방법으로도 만들 수 있다.

v1 <- c(1,4)
v2 <- c(2,5)
v3 <- c(3,6)
x <- cbind(v1, v2, v3)

rownames() , colnames() 를 활용해서 행과 열의 이름도 바꿀 수 있다.

<예제>
rownames(x) <- c("1행", "2행", "3행")
or
rownames(x)[1] <- "1행"
rownames(x)[2] <- "2행"
rownames(x)[3] <- "3행"

리스트(list)

리스트는 각 원소들이 이름을 가지거나 서로 다른 데이터 구조로 구성될 수 있다. 즉, 리스트의 원소로 리스트, 벡터, 배열 등 모든 데이터 구조가 가능하다. 데이터 프레임의 row에 접근하면 list를 리턴하는 것을 확인했다.

<예제>
리스트(row)에 접근하기
y['컬럼이름'] or y$컬럼이름

데이터 프레임(dataframe)

항상 2차원의 데이터 구조를 가진다. 엑셀이랑 똑같다고 보면 된다. 실제로 .csv 파일은 엑셀에서 그냥 열어준다. column 과 row를 가진다.

<생성예제>
x <- data.frame("컬럼이름"=c(...))
x <- cbind(x, "컬럼이름"=c(...))
x <- rbind(x, data.frame(...))
x$"컬럼이름" <- c(...)

x[3,2]
x[3, ]
x[,2]
x[-2,]
x["컬럼이름"]
x$컬럼이름

데이터 프레임같은 경우에는 내장 함수, 속성이 너무나 많지만 모두 다룰 수 없으니 이쯤에서 마무리한다.

그리고 <-= 의 차이를 알고 싶어서 검색해보니 여러가지 이유로 R에서는 = 를 값을 대입할 때 사용하지 않도록 한다. 자세한 사항은 아래 링크를 참고하자.
<- 와 = 의 차이

profile
노력하는 자는 즐기는 자를 이길 수 없다

0개의 댓글