R에서 백터 생성 하기
빅데이터/R 2018. 12. 9. 14:17
R에서 백터 생성 하기
1. 백터 생성 하기
두 개 이상의 값으로 이루어진 벡터를 생성할 때와 하나의 값으로 이루어진 벡터를 생성하는 방법은 서로 다릅니다. 두 개 이상의 값으로 이루어진 벡터를 생성하는 방법에는 대표적으로 5가지가 있는데, c(), 콜론(:), seq(), sequence(), rep()가 있습니다.
1) c()
c() 함수는 combine 또는 concatenate의 약자입니다. 벡터를 생성하는 가장 대표적인 방법으로 4가지 유형(수치형, 문자형, 논리형, 복소수형)에 모두 적용 가능합니다. 규칙이 없는 데이터로 이루어진 벡터를 생성할 때 사용합니다.
> v1 = c(1, 3, 5) > v2 = c(10, 30, 50) > v3 = c(v1, v2) > v3 [1] 1 3 5 10 30 50 | cs |
기본적으로 하나의 값을 콤마로 구분하여 입력하고, 두 개 이상의 값으로 이루어진 벡터를 콤마로 넣어도 최종적으로는 하나의 벡터가 되도록 해줍니다.
2) 콜론(:)
콜란(:)은 수치형에만 사용되는데 1씩 증가되거나 1씩 감소하는 규칙이 있는 값으로 이루어진 벡터를 생성할 때 사용합니다. start : end 와 같은 구조로 되어 있으며, start, end는 start > end이면 1씩 감소하고 start < end이면 1씩 증가합니다. 값의 시작은 무조건 start에서 시작하며 end를 넘기지 않습니다. 이와같은 방식으로 벡터를 생성할 때도 사용하지만, 다른 데이터 형태에서 연달아 있는 특정한 행이나 열의 데이터를 추출할 때 사용할 수 있습니다.
> z1 = 1 : 5 > z1 [1] 1 2 3 4 5 > z2 = 5 : 1 > z2 [1] 5 4 3 2 1 > z3 = -3.3 : 5 > z3 [1] -3.3 -2.3 -1.3 -0.3 0.7 1.7 2.7 3.7 4.7 # 1씩 증가하므로 -0.3에서 0.7이 되는것에 주의 > z4 = 5 : -3.3 > z4 [1] 5 4 3 2 1 0 -1 -2 -3 | cs |
3) seq()
seq() 함수는 sequence의 약자로 콜론(:)의 확장 또는 일반화 버전이라고 할 수 있습니다. 콜론은 1씩 증가 혹은 감소하는 수치형의 벡터를 생성하지만 seq() 함수는 1 외의 증감 규칙이 있는 수치형 벡터를 생성합니다. argument 값으로 from(시작값), to(끝값), by(증감값)가 있는데, 여기에서 증감값은 얼마씩 증가 또는 감소시킬지를 정하는 단계값입니다. 만약 값을 감소시키고자 한다면 부호가 음수여야 하며 이렇게 일정값만큼 증가/감소하는 수열을 등차 수열이라고 합니다.
> v1 = seq(from=1, to=5, by=1) # 1부터 시작해서 5를 넘지 않을 때까지 1씩 증가하는 수치형 벡터 생성 > v1 [1] 1 2 3 4 5 > v2 = seq(from=1, to=5, by=0.5) # 1부터 시작해서 5를 넘지 않을 때까지 0.5씩 증가하는 수치형 벡터 생성 > v2 [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 > v3 = seq(from=5, to=1, by=0.5) Error in seq.default(from = 5, to = 1, by = 0.5) # 5부터 1까지 0.5씩 감소시키고 싶지만 부호가 양수기 때문에 에러 발생 wrong sign in 'by' argument > v3 = seq(from=5, to=1, by=-0.5) # 5부터 1까지 0.5씩 감소하는 벡터 생성(by값에 음수를 붙여줌) > v3 [1] 5.0 4.5 4.0 3.5 3.0 2.5 2.0 1.5 1.0 | cs |
4) sequence()
sequence() 함수는 sequence(숫자) 형태로 사용됩니다. 1과 지정한 숫자 사이의 정수로 이루어진 수치형 벡터를 생성합니다.
> v1 = sequence(10) # 1~10 사이의 정수를 수치형 벡터로 생성 > v1 [1] 1 2 3 4 5 6 7 8 9 10 > v2 = sequence(5.5) # 1~5.5 사이의 정수만 수치형 벡터로 생성 > v2 [1] 1 2 3 4 5 > v3 = sequence(1) # 1 본인 자신만 가짐 > v3 [1] 1 > v4 = sequence(0) # 벡터는 생성되었지만 값은 없는 상태(초기화할 때 사용 가능) > v4 integer(0) > v5 = sequence(-3) # 음수를 지정했기 때문에 오류 발생 Error in FUN(X[[i]], ...) : argument must be coercible to non-negative integer > v5 Error: object 'v5' not found | cs |
5) rep()
rep() 함수는 replicate의 약자로 복사하다/반복하다의 뜻을 가지고 있습니다.
argument | 설명 |
x | 복사하고 싶은 벡터를 지정 |
times | times에 지정된 벡터가 하나의 수치라면, |
times에 지정된 것이 수치형 벡터이면, | |
each | each에 지정된 숫자만큼 스칼라나 벡터의 원소를 각각 복사해서 |
length.out | 생성되는 벡터의 길이를 지정하며, 이 길이도 양수값이어야 한다. |
> v1 = rep("a", times=5) # "a"라는 문자형 데이터를 5번 복사해서 문자형 벡터인 v1을 생성 > v1 [1] "a" "a" "a" "a" "a" > v2 = rep("a", each=5) # "a"라는 문자형 데이터를 각각 5번 복사해서 v1을 생성(문자가 a 하나기 때문에 times와 동일) > v2 [1] "a" "a" "a" "a" "a" > v3 = rep(c("a", "b"), times=3) # 두 개의 문자형 "a"와 "b"를 가지는 벡터의 값을 전체적으로 3번 복사해서 v3를 생성 > v3 [1] "a" "b" "a" "b" "a" "b" > v4 = rep(c("a","b"), each=3) # 두 개의 문자형 "a"와 "b"를 가지는 벡터의 값을 각각 3번 복사해서 v4를 생성 > v4 [1] "a" "a" "a" "b" "b" "b" > v5 = rep(c("a","b"), times=3, each=2) # each가 먼저, 그 다음 times가 적용되어 v5를 생성 > v5 [1] "a" "a" "b" "b" "a" "a" "b" "b" "a" "a" "b" "b" > v6 = rep(c("a","b"), times=c(10, 5)) # 속성 위치에 맞게 "a" 데이터를 10개, "b"를 5개 v6에 생성 > v6 [1] "a" "a" "a" "a" "a" "a" "a" "a" "a" "a" "b" "b" "b" "b" "b" | cs |
rep()함수에 times와 each라는 두 개의 argument가 동시에 사용되었을때 R에서는 뒤에서부터 코드가 적용되므로 each가 먼저, 그 다음 times가 적용되어 위와 같은 결과가 나오지만 rep() 함수에서는 times와 each의 위치가 바뀌어도 결과는 동일합니다.(어느것이 먼저 적용되어도 결과는 같기 때문으로 판단됨)
'빅데이터 > R' 카테고리의 다른 글
R의 요인과 행렬 (0) | 2018.12.09 |
---|---|
R의 벡터 속성 (0) | 2018.12.09 |
R의 데이터 유형의 우선순위와 강제변환 (0) | 2018.12.09 |
R의 연산자와 데이터의 유형 (2) | 2018.11.30 |
R Studio 화면구성 및 기본 환경설정(한글깨짐) (1) | 2018.11.28 |