이번 학기 교양으로 R을 배우게 됐다. 평소 파이썬을 자주 사용했었는데 R은 좀... 그렇다고 생각했다. 역시나 너무나 낯설어서 과제를 할 때 조금 헤맸다. 그래서 데이터구조에 대한 이해가 필요하다고 생각해서 정리를 한다.
벡터는 동일한 데이터 유형 의 단일 값들이 일차원적 으로 구성된 형태이다.
<예제>
x <- c(80, 85, 70)
여러개의 row를 가지고 있는 벡터는 동일한 데이터 유형이기 때문에 일괄적으로 연산자를 사용할 수 있다.
<예제>
x <- x + 5
[85, 90, 75]
벡터는 동일한 데이터 유형이기 때문에 c("A", 1, FALSE)
, c(1, FALSE)
같이 서로 다른 데이터 유형을 사용하면 형변환이 발생한다.
벡터를 생성을 돕는 함수로는 req()
, seq()
, range()
등을 사용할 수 있다.
배열은 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행"
리스트는 각 원소들이 이름을 가지거나 서로 다른 데이터 구조로 구성될 수 있다. 즉, 리스트의 원소로 리스트, 벡터, 배열 등 모든 데이터 구조가 가능하다. 데이터 프레임의 row에 접근하면 list를 리턴하는 것을 확인했다.
<예제>
리스트(row)에 접근하기
y['컬럼이름'] or y$컬럼이름
항상 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에서는 =
를 값을 대입할 때 사용하지 않도록 한다. 자세한 사항은 아래 링크를 참고하자.
<- 와 = 의 차이