R은 다양한 데이터 타입을 가지고 있습니다. 벡터, 팩터, 행렬, 배열, 데이터프레임, 리스트 등이 있습니다. 벡터에는 다시 숫자 데이터, 문자 데이터, 논리 데이터, 날짜 데이터 등이 있습니다.
숫자(numeric) 데이터
숫자가 길때에는 지수형식으로 표시됩니다.
100000 # => 1e+05
150000000 # => 1.5e+08
5e+3 # => 5000
5e-3 # => 0.005
숫자에 따옴표가 있으면 숫자가 아니고 문자입니다.
"3" * 2 # Error in "3" * 2 : non-numeric …
as.numeric("3") * 2 # as.numeric 함수로 문자를 숫자로 변환
숫자 인지를 확인하는 방법
x <- 21
is.numeric(x) # 숫자인지 확인, 숫자이면 TRUE
# 정수 지정 및 확인, L은 정수를 변수에 지정할 때 사용
y <- 5L
is.integer(y) # 정수인지 확인, 정수이면 TRUE
class(4L) # => integer
class(2.8) # => numeric
4L * 2.8 # => 11.2
문자(character) 데이터
R에서 문자는 모두 여러 글자를 의미하는 문자열 형태입니다. 문자(열)은 쌍때옴표(“)나 홑따옴표(‘)로 묶어서 표현합니다.
han # 에러: 객체 'han'를 찾을 수 없습니다
"han" # => "han"
한글 # 에러: 객체 '한글'를 찾을 수 없습니다
"한글" # => "한글"
문자(열)의 길이 확인은 숫자 데이터와 마찬가지로 nchar 함수를 사용합니다.
x <- "대한민국"
nchar(x) # ⇒ 4
nchar("hello") # ⇒ 5
nchar(3) # ⇒ 1
nchar(532) # ⇒ 3
논리 데이터
논리 데이터는 TRUE와 FALSE로 표현합니다. 두 숫자를 비교하여 참이면 TRUE, 거짓이면 FALSE를 반환합니다.
3 >= 5 # ⇒ FALSE
2 != 3 # 2와 3은 다른가 ? ⇒ TRUE
숫자로는 TRUE는 1, FALSE는 0과 같습니다.
TRUE * 3 # 1*3과 같으므로 결과값은 3
FALSE * 3 # 0*3과 같으므로 결과값은 0
TRUE와 FALSE의 단축키로 T와 F를 사용할 수 있으나, T와 F는 단순히 TRUE와 FALSE를 저장한 변수이므로 T에 다른 값을 저장할 수 있어 사용하지 않는 것이 좋습니다.
T # ⇒ TRUE
T <- 5
T # ⇒ 5
날짜 데이터
날짜는 1970-01-01 이후의 경과일의 수로 표현됩니다.
# 오늘의 날짜 "2016-10-23"
today <- Sys.Date()
# 오늘의 날짜와 시간 "2016-10-23 14:00:15 KST"
now <- Sys.time()
# 미국식 날짜와 시간 "Sun Oct 23 14:00:25 2016"
today2 <- date()
# 문자를 날짜를 변환하기위해 as.Date( ) 사용
mydates <- as.Date(c("2016-07-21", "2015-03-15"))
# 2016/7/21와 2015/3/15 사이의 날짜 수
mydates[1] - mydates[2] # => Time difference of 494 days
날짜 형식
| 형식 | 의미 | 예시 |
| %d | 일을 숫자로(0~31) | 01 ~ 31 |
| %m | 월을 숫자로(00~12) | 00 ~ 12 |
| %y | 년도를 두 자리 숫자로 | 16 |
| %Y | 년도를 네 자리 숫자로 | 2016 |
| %a | 주를 약어로 | 월 |
| %A | 주를 전체 이름으로 | 월요일 |
| %b | 월을 약어로 | Jan |
| %B | 월을 전체 이름으로 | January |
# 오늘 날짜를 원하는 형태로 출력
today <- Sys.Date()
# 출력결과 "2016년 10월 23일(일요일)"
format(today, format="%Y년 %m월 %d일(%A)")
문자를 날짜로 변환해주는 함수는 as.Date()입니다. 함수의 형식은 as.Date(x, "format")입니다. 기본 포멧형식은 yyyy-mm-dd 입니다.
as.Date("2015-05-21") # => "2015-05-21"
as.Date("02/05/2015", "%m/%d/%Y") # => "2015-02-05"
as.Date("2015년 2월 5일", "%Y년 %m월 %d일")
as.Date("161215", "%y%m%d") # => "2016-12-15"
as.Date("01-11-2016", "%d-%m-%Y") # => "2016-11-01"
날짜를 숫자나 문자로 변환하려면 as.numeric()과 as.character()를 사용합니다.
myday <- as.Date("2016-11-21")
as.numeric(myday) # => 17126
as.character(myday) # => "2016-11-21"
날짜와 시간까지 있는 경우 as.POSIXct()를 사용합니다.
as.POSIXct("2016-05-21 17:25") # => "2016-05-21 17:25:00 KST"
lubridate와 같은 패키지를 사용하면 날짜와 시간을 더 쉽게 다룰 수 있습니다.
결측(missing) 데이터
R에서 결측 데이터(missing values)는 기호 NA(not available)로 표현됩니다.
결측값 존재 여부 확인
x <- c(2, NA, 7, NA, 6)
is.na(x) # => FALSE TRUE FALSE TRUE FALSESE
s <- c("대한", NA, "민국")
is.na(s) # => FALSE TRUE FALSE
특정값을 결측값으로 지정
# 데이터프레임 df1의 변수 v1에 있는 값 중 99를 결측값으로 변환
df1$v1[df1$v1==99] <- NA
결측값을 분석에서 제외
x <- c(2, NA, 7, NA, 6)
# NA가 포함된 계산은 NA를 출력
mean(x) # => NA
# 옵션 na.rm=TRUE는 계산에서 NA를 제외
mean(x, na.rm=TRUE) # => 5
결측값 관련 데이터 추출
x <- c(21, NA, 23, NA, 25)
y <- c(1, 2, NA, 4, 5)
df <- data.frame(x, y)
# 결측값이 있는 데이터만 추출
df[!complete.cases(df),]
# 결측값이 없는 새로운 데이터셋 생성
newdata <- na.omit(df) # na.omit()는 결측값이 있는 모든 행 삭제
newdata <- df[complete.cases(df),]
NA와 유사한 의미를 갖는 기호로 NULL이 있는데, NA는 주로 벡터 데이터에서 결측 값을 나타내는 데 쓰이고, NULL은 데이터 프레임이나 리스트 등에서 변수나 구성요소를 제거할때 주로 사용됩니다.
# 데이터프레임 df에 있는 변수 x를 제거
str(df$x) # => num [1:5] 21 NA 23 NA 25
df$x <- NULL
str(df$x) # => NULL
댓글 없음:
댓글 쓰기