일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- plugin
- NPM
- es6
- SSL
- IntelliJ
- mapreduce
- Android
- mybatis
- Java
- Sqoop
- react
- table
- SPC
- tomcat
- MSSQL
- Spring
- xPlatform
- 공정능력
- Python
- window
- GIT
- 보조정렬
- SQL
- JavaScript
- Kotlin
- vaadin
- Eclipse
- hadoop
- Express
- R
- Today
- Total
DBILITY
R data type vector, factor, list ( 벡터, 팩터, 리스트 ) 본문
R은 벡터 단위로 데이터처리, 병렬처리가 기본이다.
변수는 알파벳, 숫자, _, .으로 구성할 수 있으며, 할당연산자는 <-, = 이다.
NA(Not Available)는 상수로 결측치(누락값,알수없음)를 나타내며, 결측치와 어떠한 연산을 해도 결측치,NA가 된다. is.na() 함수로 확인할 수 있다.
NULL은 초기화되지 않은 값을 나타내며(value is undefined), NULL과 어떠한 연산을 해도 NULL이 된다. is.null() 함수로 확인할 수 있다.
변수 x에 숫자벡터 1,2,3을 할당하는 예제, 실행 결과가 포함되어 있다.참고로 스칼라는 크기가 1인 벡터와 같다.
> x<-c(1,2,3)
> x
[1] 1 2 3
> x<-"Hello R~"
> x
[1] "Hello R~"
함수 예제, 실행 결과가 포함되어 있다.
> y<-function(a,b,c=0,d=2){
+ return (a+b+c+d)
+ }
> y(1,2,3)
[1] 8
> y(1,2,3,NA)
[1] NA
> y(1,2,3,NULL)
numeric(0)
> is.function(y)
[1] TRUE
범주(category)형 타입[factor]은 범위가 정해져 있으며,분류 가능한 항목들의 집합으로,명목형과 순서형이 있다.
ER모델링에서 1차 정규화시 분리되는 엔티티의 반복 속성값이나 java Enumeration을 떠올리면 되겠다. 아니면 말고
{대,중,소} 나 {사과,배,감} 등은 비교가 불가한 데이터로 이들은 나열한 것으로 말 그대로 이름의 목록을 나열한 것이 명목형이다.
> grade<-factor('중',c('대','중','소'))
> grade
[1] 중
Levels: 대 중 소
> nlevels(grade)
[1] 3
> levels(grade)
[1] "대" "중" "소"
> levels(grade)[3]
[1] "소"
> grade<-factor('중',c('대','중','소'),ordered=TRUE)
> grade
[1] 중
Levels: 대 < 중 < 소
> levels(grade)<-c('1','2','3')
> levels(grade)[1]
[1] "1"
> grade<-ordered('중',c('대','중','소'))
> grade
[1] 중
Levels: 대 < 중 < 소
벡터는 배열형태로 동일한 데이터 타입만 저장 가능하고, c() 함수로 생성한다.
혼합된 데이터타입이 입력될 경우 형변환이 일어나며 정수<실수<문자로 자동변환이 이루어진다.
벡터내에 벡터가 요소로 포함되더라도 1차원 벡터로 변환된다.
x<-c(1:5)
x
[1] 1 2 3 4 5
x<-c(1:5,c(1:5))
x
[1] 1 2 3 4 5 1 2 3 4 5
벡터의 요소에 접근은 인덱스나 이름을 통해 가능하다.
names()함수로 벡터의 각 요소에 이름을 줄 수 있다.
[[인덱스]] 형태로 값만 취할수 있다.
x<-c(1,2,3)
> names(x)<-c('a','b','c')
> x
a b c
1 2 3
> x[2]
b
2
> x["b"]
b
2
> x[c(1,3)]
a c
1 3
> x[[3]]
[1] 3
> names(x)[2]
[1] "b"
> length(x)
[1] 3
> nrow(x)
NULL
> NROW(x)
[1] 3
벡터비교는 ==,identical(), setequal() 함수를 통해 가능하다. setequal은 벡터를 집합으로 처리하고 동일요소가 존재하는지 비교한다.
== 사용시 주의할 점은 첫번째 요소만 비교한다는 것이다.
> identical(c(1,2),c(1,2,3))
[1] FALSE
> identical(c(1,2),c(1,2,2))
[1] FALSE
> setequal(c(1,2),c(1,2,3))
[1] FALSE
> setequal(c(1,2),c(1,2,2))
[1] TRUE
> if(c(1,2)==c(1,10)) {
+ print("equal")
+ }
[1] "equal"
Warning message:
In if (c(1, 2) == c(1, 10)) { :
the condition has length > 1 and only the first element will be used
> if(identical(c(1,2),c(1,10))) {
+ print("equal")
+ } else {
+ print("not equal")
+ }
[1] "not equal"
벡터내에 특정 값이 존재하는지는 %in% 연산자로 처리한다.
> 3 %in% c(1,2,3,4,5)
[1] TRUE
> 6 %in% c(1,2,3,4,5)
[1] FALSE
seq함수는 순차벡터를 생성(sequence generation)한다. seq(from, to, by, length.out, along.width) 형태로 정의하며, 각각 시작값, 종료값, 증감값, 결과벡터길이,벡터길이만큼 실행을 나타낸다.
length.out은 숫자를 입력하고,along.width는 벡터를 입력합니다. 결과는 같습니다.
seq_along함수는 1부터 시작하여 인수로 공급된 벡터의 길이까지 시퀀스를 생성합니다.
: 시퀀스연산자로 1:5의 표현식은 1부터 5까지 1씩 증가하며 생성한다는 것.
> 1:5
[1] 1 2 3 4 5
> seq(1,5)
[1] 1 2 3 4 5
> seq(1,5,1)
[1] 1 2 3 4 5
> seq(1,5,length.out = 5)
[1] 1 2 3 4 5
> seq(1,5,along.with = c(5:1))
[1] 1 2 3 4 5
> x<-seq(1,10,2)
> x
[1] 1 3 5 7 9
> seq(1,10)
[1] 1 2 3 4 5 6 7 8 9 10
> 1:10
[1] 1 2 3 4 5 6 7 8 9 10
> x<-c(seq(1,10,2))
> x
[1] 1 3 5 7 9
> 1:NROW(x)
[1] 1 2 3 4 5
> seq_along(x)
[1] 1 2 3 4 5
> seq_along(10000)
[1] 1
> seq_along(c(1:10))
[1] 1 2 3 4 5 6 7 8 9 10
> seq_len(10)
[1] 1 2 3 4 5 6 7 8 9 10
> seq(1,10,length.out = 2)
[1] 1 10
> seq(1,10,length.out = 3)
[1] 1.0 5.5 10.0
> seq(1,10,along.with = c(1,2,3,4,5))
[1] 1.00 3.25 5.50 7.75 10.00
> seq(1,10,length.out = 5)
[1] 1.00 3.25 5.50 7.75 10.00
rep함수는 인수로 지정한 벡터의 복제를 실행한다. req(c(), times, each) 형태로 정의하며, 각각 벡터,벡터복제회수,요소별 복제회수를 나타낸다. 뭔말이지?!
> rep(c(1,2,3,4,5),times=2)
[1] 1 2 3 4 5 1 2 3 4 5
> rep(c(1,2,3,4,5),times=2,each=2)
[1] 1 1 2 2 3 3 4 4 5 5 1 1 2 2 3 3 4 4 5 5
> length(rep(c(1,2,3,4,5),times=2,each=2))
[1] 20
벡터는 동일한 데이터형식만 저장이 가능했다. 다른 데이터형식끼리 저장이 불가능하다면 어쩌라고?
리스트형이 존재하고, R의 리스트형은 key,value형태로 정의한다.
[[]] 대괄호 두개에 인덱스를 입력하면 리스트의 값만 참조할 수 있다.
> x<-list(name="가가가", sex="아저씨")
> x
$`name`
[1] "가가가"
$sex
[1] "아저씨"
> x<-list(name=c("가가가","나나나","다다다"), sex=c("아저씨","아줌마","꼬맹이"))
> x
$`name`
[1] "가가가" "나나나" "다다다"
$sex
[1] "아저씨" "아줌마" "꼬맹이"
> x$name[1]
[1] "가가가"
> x$sex[3]
[1] "꼬맹이"
> x[1]
$`name`
[1] "가가가" "나나나" "다다다"
> x[[1]]
[1] "가가가" "나나나" "다다다"
> x[[2]][3]
[1] "꼬맹이"
> y<-list(name=c('가가가','나나나','다다다'),value=list(val=c('아저씨','아줌마','꼬맹이')))
> y
$`name`
[1] "가가가" "나나나" "다다다"
$value
$value$`val`
[1] "아저씨" "아줌마" "꼬맹이"
> y[[1]]
[1] "가가가" "나나나" "다다다"
> y[[1]][1]
[1] "가가가"
> y$name[1]
[1] "가가가"
> y[[2]]
$`val`
[1] "아저씨" "아줌마" "꼬맹이"
> y$value
$`val`
[1] "아저씨" "아줌마" "꼬맹이"
> y$value[1]
$`val`
[1] "아저씨" "아줌마" "꼬맹이"
> y$value[1][1]
$`val`
[1] "아저씨" "아줌마" "꼬맹이"
> y$value[1]$val
[1] "아저씨" "아줌마" "꼬맹이"
> y$value[1]$val[3]
[1] "꼬맹이"
> y<-list(name=c('가가가','나나나','다다다'),value=list(val=c('아저씨','아줌마','꼬맹이'),val2=c('10','20','30')))
> y
$`name`
[1] "가가가" "나나나" "다다다"
$value
$value$`val`
[1] "아저씨" "아줌마" "꼬맹이"
$value$val2
[1] "10" "20" "30"
> y[[1]][1]
[1] "가가가"
> y$name[1]
[1] "가가가"
> y[[1]]
[1] "가가가" "나나나" "다다다"
> y[[2]]
$`val`
[1] "아저씨" "아줌마" "꼬맹이"
$val2
[1] "10" "20" "30"
> y[[2]][1]
$`val`
[1] "아저씨" "아줌마" "꼬맹이"
> y[[2]][2]
$`val2`
[1] "10" "20" "30"
> y$value[1]$val[3]
[1] "꼬맹이"
> y$value[2]
$`val2`
[1] "10" "20" "30"
> y$value[2]$val2
[1] "10" "20" "30"
> y$value[2]$val2[1]
[1] "10"
'statistics > R' 카테고리의 다른 글
R arithmetic operation and deal with NA (Not Assign-missing data) (0) | 2018.11.23 |
---|---|
R control statements ( 제어문 ) (0) | 2018.11.23 |
R type casting ( 데이터 형 변환 ) (0) | 2018.11.23 |
R data type array, dataframe (배열, 데이터프레임) (0) | 2018.11.22 |
R data type array (행렬) (0) | 2018.11.21 |