요번엔 데이터 변형에 대해 알아보도록 하겠습니다.
a,b,c라는 곳에 Numeric 값을 집어넣어 볼게요~
a<-c(24,23,53,43,77,30)
b<-c(87,66,93,70,92,60)
c<-factor(c("A","A","B","B","C","A"))
벡터를 이제 여러 집단으로 분할해보겠습니다.
groups<-split(a,c)
groups
$A
[1] 24 23 30
$B
[1] 53 43
$C
[1] 77
요렇게 A에 해당하는 24, 23, 30과 B에 해당하는 53, 43, C에 해당하는 77로 분할됩니다.
split(b,c)를 하는 경우에는 어떻게 될지 아시겠죠~?
위와 똑같은 결과를 나타내는 다른 방법은 아래와 같습니다.
print(groups<-unstack(data.frame(a,c)))
# 이번엔, 데이터프레임을 여러집단으로 분할해보겠습니다.
# MASS패키지의 Cars93 데이터셋을 활용하겠습니다.
# 패키지를 사용하기 위해서는 설치와 라이브러리함수로 불러들어야 합니다.
install.packages("MASS")
library(MASS)
#먼저 Cars93 데이터셋을 살펴봅니다.
Cars93
sp<-split(Cars93$MPG.city, Cars93$Origin)
sp
#이러면 Origin 열변수에 따른 MPG.city가 분할되겠죠?
$USA
[1] 22 19 16 19 16 16 25 25 19 21 18 15 17 17 20 23 20 29 23 22 17 21 18 29
[25] 20 31 23 22 22 24 15 21 18 17 18 23 19 24 23 18 19 23 31 23 19 19 19 28
$`non-USA`
[1] 25 18 20 19 22 46 30 24 42 24 29 22 26 20 17 18 18 29 28 26 18 17 20 19
[25] 29 18 29 24 17 21 20 33 25 23 39 32 25 22 18 25 17 21 18 21 20
위와 같이 분할된 것을 볼 수 있습니다. 각각의 열이 무엇을 의미하는지 알고 싶으시다면?
??Cars93
이렇게 치시면 됩니다.^.^
MPG.city
City MPG (miles per US gallon by EPA rating).
Origin
Of non-USA or USA company origins? (factor).
요렇게 설명되어 있네요!
str(sp)
이렇게 치시면, sp의 구조가 무엇인지 나타나는데요, List형태라고 뜹니다.
#lapply를 써볼텐데요, lapply(sp, median)이렇게 하면, sp의 Origin별 중앙값이 list변수에 입력됩니다.
#lapply는 결과를 리스트 형태로 반환해주는 역할을 합니다.
list<-lapply(sp, median)
list
$USA
[1] 20
$`non-USA`
[1] 22
이렇게 뜹니다.
#이번엔 sapply를 써보겠습니다. sapply는 결과값을 벡터 또는 행렬로 반환합니다.
#아래와 같이 치면 Origin 별 길이가 나오겠죠~? 따라서 뒤의 값은 본인이 원하는 함수를 써주면 됩니다.
vec<-sapply(sp, length)
vec
USA non-USA
48 45
USA는 48개, non-USA는 45개의 값이 있다는 것을 알 수 있습니다.
#이번엔 문자열과, 날짜를 다뤄보겠습니다.
a<-"안녕하세요. 학생입니다!"
nchar(a)
[1] 13
여기서 알 수 있는 점은, 공백과 마침표, 느낌표 모두 다 문자열 길이에 포함이 된다는 것입니다.
문자열은 nchar()로, 벡터는 length()로 길이를 측정해볼 수 있습니다.
이제 붙이기를 해볼까요?
paste("안녕", "하세","여?", sep="-")
[1] "안녕-하세-여?"
# 요렇게 붙이는 데마다 구분자 "-" 이것이 붙이게끔 했습니다.
paste("the pi is approximately", pi)
[1] "the pi is approximately 3.14159265358979"
#이렇게 하면 앞에 있는 글자와 pi가 합쳐진 것을볼 수 있죠.
#여기서의 vec은 아까 USA와 non-USA의 벡터 길이를 저장한 변수입니다.
paste(vec, "loves me", collapse=", and ")
#예상해보면, 48 loves me, and 45 loves me가 되겠죠.
#vec은 2가지 값을 가지기 때문에, loves me가 두 번 반복됩니다.
#문자열 추출을 해볼까요?
substr("안녕하세요", 1,3) #이렇게 되면, 안녕하세요에서 1부터 3번째 문자를 반환합니다.
[1] "안녕하"
#구분자로 문자를 구분해보겠습니다. strsplit(문자열, 구분자)를 사용하면 구분자가 있는 곳마다 구분합니다.
a<-"안녕,하세요,저는,학생,입니다"
strsplit(a,",")
[1] "안녕" "하세요" "저는" "학생" "입니다"
#날짜 변환을 알아보겠습니다.
Sys.Date() # 현재 시스템의 날짜를 반환
[1] "2017-07-20"
#날짜변환
format(Sys.Date(), format = "%m/%d/%y")
[1] "07/20/17"
이렇게 month, day, year순서대로 포맷이 변경되죠.
#날짜 조회법들을 알아보겠습니다ㅏ.
format(Sys.Data(), '%a') #요일 조회
format(Sys.Data(), '%b') #축약된 월이름 조회
format(Sys.Data(), '%B') #전체 월이름 조회
format(Sys.Data(), '%d') #두자리 숫자의 일 조회
format(Sys.Data(), '%m') #두자리 숫자의 월 조회
format(Sys.Data(), '%y') #두자리 숫자의 연도 조회
format(Sys.Data(), '%Y') #네자리 숫자의 연도 조회
#이렇게 오늘은 간단한 것들을 알아봤습니다. 참고가 되었으면 좋겠네여~
'## 오래된 게시글 (미관리) ## > R' 카테고리의 다른 글
34. 데이터 마트 II (0) | 2018.11.22 |
---|---|
33. 데이터마트 (0) | 2018.11.22 |
31. 데이터 구조와 데이터 프레임 II (0) | 2018.11.22 |
30. (NEW) 데이터 구조와 데이터 프레임 (0) | 2018.11.21 |
29. 비정형 데이터마이닝 - 텍스트마이닝 (0) | 2018.11.21 |