3. 문자형 벡터

 

스칼라 (scalar) 또는 벡터 (vector)는 숫자 이외에도 문자를 구성 요소로 사용할 수 있다 .

문자형 객체를 생성할 때는 ""를 이용한다.

 

> col <- c(“red”,  “blue”, "yellow")

> col

[1] “red” blue”, "yellow"

 

문자형과 숫자형을 같이 사용해보자.

> c(“(“red”,  “blue”, "yellow", 1, 2)

[1] “red” “green” “blue” “1” "2"

숫자형에 ""가 붙어 문자형으로 표시된 것을 알 수 있다. 이와 같이 벡터는 반드시 같은 유형의 객체를 포함한다.

 

     다음은 문자형 벡터와 함께 사용되는 기본적인 연산함수이다 .

①substr(x, start, stop) - x 는 문자형 벡터 , start stop 은 뽑아내고자 하는 문자열의 처음과 끝을 나타낸다 .

> substr(col, 1, 3)

[1] “red” “blu” “yel”

 

 paste(...) - 문자열을 결합해주는 함수

> y<-paste(col, “pants”)

> y

[1] “red pants” “blue pants” “yellow pants”

 이 때, red와 pants의 공백을 없애고 싶다면 옵션에 sep=""를 설정해 주면 된다. 

옵션 중에 collapse=“, ” 는 벡터의 모든 구성요소들을 “, ”으로 모두 묶어 하나의 문자열을 생성한다.

> paste(“I have”, y, collapse=“, ”)

[1] “I have red pants, I have blue pants, I have yellow pants”

 

2. 벡터 성분 및 연산

 

 

아래와 같이 []를 사용하여 성분을 확인 할 수 있다.

> x <- c(1,2,3,4,5)

> x[3]

[1] 3

 

조건을 만족하는 벡터의 성분을 뽑아낼 수 있다. 

 

> x[1:3]

[1] 1 2 3

> x[x<3]

[1] 1 2

 

성분을 제거하고 싶을 경우에는 -를 이용한다.

> x[-2]

[1] 1 3 4 5

 

 

R에서 연산은 벡터 단위로 수행된다.

 

> x <- c(1,2,3)

> y <- c(4,5,6)

> x*y

[1] 4 10 18

 

R의 기본 산술연산자 함수는 다음과 같은 것들이 있다.

 

함수 

의미 

 sum(x)

 합

 mean(x)

 평균

 min(x)

 최솟값

 max(x)

 최댓값

 var(x)

 분산

 sd(x)

 표준편차

 median(x)

 중위수

 

이 외에도 여러가지가 있으니 필요할 때 적절히 사용하면 된다.

> sum(x)/max(y)

[1] 1

 

1. 벡터 (Vectors)

 

R에서는 객체라는 것을 이용하는데, R에서 생성되고 저장되는 모든 것이 객체이다. 벡터는 같은 유형의 객체들의 모임이다.

c() 함수를 이용하여 여러 객체들을 모아 벡터를 생성한다.

> x <- c(1,2,3)

> x

[1] 1 2 3

   

특정한 패턴이 있는 벡터(vector)를 만들기 위해서는 다음과 같은 함수를 사용할 수 있다.

 

①  : - 단조증가(또는 단조감소) 형식의 연속된 값을 생성하는 함수

> x1 <- -2:3

> x1

[1] -2 -1 0 1 2 3

 

 ②rep() - 주어진 패턴을 반복하는 함수

 

      rep(x, times = 1, length.out = NA, each = 1)

- times : x 전체를 반복

- each : x의 각 요소를 반복

 

 

3을 5번 반복해보자.

 

> rep(3, times=5)

[1] 3 3 3 3 3

> rep(3, each=5)

[1] 3 3 3 3 3

 

1에서 3까지 전체를 2번 반복해보자.

> rep(1:5, times=2)

[1] 1 2 3 4 5 1 2 3 4 5

 

1에서 3까지를 각각 2번씩 반복해보자.

> rep(1:3, each=2)

[1] 1 1 2 2 3 3

 

 

③seq() - 수열 함수

 

      seq (from=1, to=1, by=..., length.out=NULL)

- by : 증분값, default는 -1,0,1중 하나

- length.out : 수열의 길이

 

> seq(1, 5)

[1] 1 2 3 4 5

 

 

R을 처음 시작하면 사실 가장 쉬우면서도 까다로운 것이 다른 파일을 불러오는 것이라고 생각합니다.

R은 대/소문자를 구분하며, 그에 따른 정확한 함수명과 패키지명, 파일명을 입력하는 것이 매우 중요합니다.

 

우리가 프로그래밍을 하면서 자주 사용하게 되는 txt, xlsx, csv등의 데이터 파일을 불러오는 방법을 알아봅시닷.

우선 오늘은 txt파일을 불러오는 방법부터 보겠습니다.

 

6명의 수학점수가 나와있는 간단한 txt 데이터를 이용해 보겠습니다.

맨 위에 변수명이 있고, 공백으로 띄워져 있네요.

txt데이터를 불러올 때는 R에서 내장되어 있는 함수인 read.table()을 활용합니다.

read.table(file, header = FALSE, sep = "", quote = "\"'", dec = ".", numerals = c("allow.loss", "warn.loss", "no.loss"), row.names, col.names, as.is = !stringsAsFactors, na.strings = "NA", colClasses = NA, nrows = -1, skip = 0, check.names = TRUE, fill = !blank.lines.skip, strip.white = FALSE, blank.lines.skip = TRUE, comment.char = "#", allowEscapes = FALSE, flush = FALSE, stringsAsFactors = default.stringsAsFactors(), fileEncoding = "", encoding = "unknown", text, skipNul = FALSE)

이 데이터를 들고 오기 위해서는 우선 속성에서 위치를 찾아야 합니다.

 

 

C드라이버 밑에 data폴더 안에 있습니다. 저 위치를 드래그하여 복사해 R로 와서 입력해 줍니다.

> score<-read.table("C:\data\score.txt", header=T)
Error: '\d' is an unrecognized escape in character string starting ""C:\d"
 
다음과 같이 read.table()안에 파일경로및 변수명.txt를 복사해오면 \가 역슬래쉬 형태로 나타나며, 저 경우에는 R에서 반드시 에러가 나게됩니다.
R에서 파일 경로를 지정할 때는 반드시 역슬래쉬를 /로 바꿔줘야 합니다. 
아니면, 역슬래쉬를 두번 써줘야 합니다.

> score<-read.table("C:\\data\\score.txt", header=T) > score<-read.table("C:/data/score.txt", header=T)

> score
  id gender math
1  1      M   97
2  2      F   78
3  3      M   66
4  4      F   90
5  5      M   74
6  6      F   85

 

다음과 같이 오류없이 잘 들어간 것을 살펴볼 수 있습니다.

 

header는 txt파일에서 맨윗줄의 변수명들을 들고오고 싶다면 T, 제외하고 싶다면 F를 지정하시면 됩니다.

 

데이터 구분이 공백이 아닌 , 로 되어있는 경우도 제법 많습니다. 그럴 땐 구분자를 지정해주는 sep=","를 써주면 파일을 잘 불러들일 수 있습니다.

> str(score)
'data.frame':	6 obs. of  3 variables:
 $ id    : int  1 2 3 4 5 6
 $ gender: Factor w/ 2 levels "F","M": 2 1 2 1 2 1
 $ math  : int  97 78 66 90 74 85

구조를 살펴보면, id, math는 numeric, gender는 factor임을 알 수 있습니다.

 

가끔, 이 변수타입들을 데이터를 불러올 때부터 바꿔서 가져와야 할 경우가 있습니다.

 

예를들어 우편번호의 앞 3자리만 이용하는 코드를 짜고 싶은데, 00533, 01232와 같은 데이터값들은 R에서 numeric타입으로 읽어 533, 1232로 가져와 버립니다.

 

이 경우엔 숫자형이 아닌 문자형변수로 들고와 줘야 합니다. 우편번호의 예와 같이 특정한 경우가 아니라면, 불러들인 다음 as.을 이용해서 바꿔주시면 됩니다.

 

하지만 R에서 이미 533으로 읽어 버렸다면 as.charactor()을 사용해도 "533"으로 변환되지 "00533"으로 바뀌지 않습니다.

 

이럴 때 사용할 수 있는 것이 read.table()의 옵션 중 colClasses라는 것입니다.

 

만약 저희가 id를 int가 아닌 factor타입으로 읽고 싶다면

 

> score<-read.table("C:/data/score.txt", header=T, colClasses = c("factor", "factor", "integer"))
> str(score)
'data.frame':	6 obs. of  3 variables:
 $ id    : Factor w/ 6 levels "1","2","3","4",..: 1 2 3 4 5 6
 $ gender: Factor w/ 2 levels "F","M": 2 1 2 1 2 1
 $ math  : int  97 78 66 90 74 85

다음과 같이 지정해 주시면 factor로 바꿔 들어간 것을 살펴볼 수 있습니다. 옵션들을 잘 사용하면 데이터를 불러올 때 난감한 상황에서 잘 해결할 수 있습니다.

 

 

 

다음번에는 csv파일과 xlsx파일을 불러오는 법에 대해 다뤄보도록 하겠습니다.

 

 

 

 

 

 

 

 

 

+ Recent posts