R 데이터 조작 I
-
데이터 읽고 쓰기, 데이터 자체를 저장, 데이터끼리 묶기
-
read.csv(파일명, header=TRUE/FALSE)
-
읽어올 때 문자들을 모두 factor처리하기 때문에, 이를 문자열로 바꾸기 위해 -> stringAsFactors=FALSE처리하여 들여옴 ex)read.csv(a.csv, stringAsFactors=FALSE)
-
NA를 읽어들어 올때, 이를 문자처리 하기 위해 NIL로 변환되서 들어옴. 이 때, 그 열의 나머지 숫자들도 문자처리해서 이를 막아줘야 함. -> na.strings이용 ex) x <- read.csv(a.csv, na.strings=c(‘NIL’)) : 이러면 NIL을 인식해 na처리
-
write.csv(변수, ‘파일이름.csv’,row.names = F)
-
row.names는 행에 자동으로 이름을 부여하는가인데, default가 T
-
save,load: 데이터만 저장하고 읽어올 수 있음
-
save(x,y,file=’xy.RData’)
-
load(‘xy.RData’)
-
rbind/cbind: rowbind/columnbind
-
rbind로 벡터나 데이터 프레임을 결합할 수 있음
-
data.frame을 생성할 때, stringsAsFactors = FALSE로 하는 이유는 데이터가 명목형이 아닌 단순 문자열이기 때문이다.
-
데이터프레임은 cbind로 결합은 가능하나 오른쪽에 같다 붙이는거라서 새로운 행이 추가됨, 목적과 맞지 않음.
-
$를 사용해서 열 추가
-
apply류 함수
-
기본 구조 apply류함수(적용대상, 함수->만드는 것 가능)
-
ex)apply(x, function(x){x*2})
-
행렬의 경우 -> apply함수를 사용
-
ex)apply(행렬, 1/2=행/열, apply함수명)
-
iris데이터를 이용 -> apply(iris[,1:4],2,sum): 4개 열들의 합
-
대체가능한 함수들
-
rowSums(),colSums()
-
ex) colSums(iris[,1:4])
-
벡터 또는 리스트의 경우 -> lapply
-
ex)lapply(1:3,function(x){x*2}) -> output이 list가 아닌 벡터이고 싶을 때 -> unlist(리스트) 사용
-
list를 사용해서 평균구하기 -> ex) lapply(리스트,mean)
-
list인 아웃풋을 데이터프레임으로 변환하고 싶을 때 ->
-
unlist(): 벡터로 변환
-
matrix(): 행렬로 변환
-
as.data.frame(): 행렬을 데이터프레임으로 변환
-
do.call(): data.frame(do.call(cbind, lapply(iris[,1:4],mean))) -> 이런 방식 가능
-
벡터, 리스트, 데이터프레임의 경우, output이 list가 아닌 행렬,벡터로 반환하는 함수 -> sapply
-
ex) sapply(iris[,1:4],mean) -> 결과가 벡터 -> as.data.frame을 이용해서 데이터프레임으로 구조 변환 가능
-
이 때, 행과 열이 뒤바뀌어서 나오는데, t(행렬)을 수행해서 원래 모양으로 변형
-
한가지 타입만 저장 가능한 벡터, 행렬, 배열로 반환하기 때문에 입력값들이 동일한 구조형이어야한다. -> 여러 데이터 타입에 대해 사용하고 싶다면 lapply()사용
-
어떤 범주에 해당f하는 값들만 연산하고 싶을 때 -> tapply()
-
ex) tapply(iris$Sepal.Length, iris$Species, mean): 종에 따른 꽃받침 길이의 평균
-
함수에 인자를 넘겨주어서 연산 -> mapply()
-
ex) mapply(function, c(1,2,3), c(‘a’,’b’,’c’))를 수행하면 (1,’a’)와 (2,’b’),(3,’c’)로 묶여서 function에 들어가서 연산하여 결과를 도출
-
ex) mapply(mean, iris[1:4]): 1부터 4열까지 한 열씩 평균을 구함
-
base패키지가 기본이 됨
-
summary(): generic function in r
-
인자가 자료일 땐 -> 통계값, 인자가 모델일 때 ->모델 요약
-
수치형 자료의 경우 quantile사용 가능
-
ex) quantile(iris$Sepal.Length)
-
order(): index를 output으로 내보냄
-
기본 패키지여서 자주사용
-
sample(): 주어진 데이터에서 샘플 추출
-
replace =TRUE 중복 허용
-
sample(1:10,5,replace=T)
-
무작위로 데이터 뽑고 싶을 때 사용
-
iris[sample(nrow(iris)),]: iris데이터를 무작위 index를 부여해 무작위로 뽑음
-
split(데이터, 분리조건)
-
ex) split(iris, iris$Species): 종을 기준으로 iris구분
-
반환값은 list - > lapply사용
-
doBy 패키지
-
summaryBy(): 특정 조건을 주어서 summary를 함
-
ex) summaryBy(Sepal.Length + Sepal.width ~ Species, iris)
-
+로 묶은건 열을 주는 것, Species는 행, iris는 데이터
-
orderBy(): 특정 조건으로 ordering
-
ex) orderBy(~Sepal.Width, iris)
-
모든 열을 볼것이기 때문에 공백 후, ~ Sepal.Width를 기준으로 정렬
-
이 때, Species에 의해 먼저 정렬 후, 정렬
-
sampleBy()
-
ex) sampleBy(~Species, frac=0.1, data=iris)
-
10%로씩 끊어서 추출
-
subset(데이터, 조건, select=열선택)
-
split()함수와 유사하지만 특정 조건의 것을 분류하는데 사용
-
ex) subset(iris, Species ==’setosa’ & Sepal.Width > 5.0, select = c(Sepal.Width))
-
select 조건을 걸면 그 조건에 해당하는 것만 보여줌
-
특정열을 제외하려면 select = -c(Sepal.Width)이런 식
-
merge(): 두개의 공통된 프레임으로 데이터셋을 묶는 것
-
ex) x<- data.frame(name =c(‘a’,’b’,’c’), math =c(20,30,40))
-
ex) y<- data.frame(name =c(‘a’,’b’,’c’), english =c(20,30,40))
-
ex) merge(x,y)
-
만약 한쪽 데이터의 갯수가 모자르면 all=TRUE로 설정
-
빈 데이터를 NA로 채움
-
cbind()는 단순히 열을 합치는 것
-
sort()/order()
-
sort(): 값을 반환
-
order(): index반환
-
with()/within()
-
with(): 데이터프레임의 열을 데이터프레임 이름 없이 접근하기 위함
-
ex) with(iris, {print(Sepal.Width)})
-
within(): 데이터를 수정할 때 사용, with와 비슷
-
ex) within(x, ifelse(is.na(val),val <- median(val, rm.na =T),x))
-
median(열, na값을 지움)
-
attach()/detach(): with()와 within()함수랑 비슷, 아얘 불러놓고 쓰기
-
ex) attach(iris)
-
attach()하고 나서 데이터 프레임을 변경하면 detach()하고나서 변한 데이터가 적용되지 않음
-
which(): 조건에 해당하는 위치 찾음
-
ex) which(x%%2==0)
-
ex) x[which(x%%2==0)]
-
which.min(x), ex) x[which.min(x)]
-
which.max(x)
-
aggregate(formula, 데이터, 함수)
-
ex) aggregate(Sepal.Length ~ Species, iris, mean)
-
stack()/ unstack(): summaryBy()등을 사용하기 편치않은 데이터 구조를 바꿀 때
-
x<- data.frame(medicine =c(‘a’,’b’,’c’), ctl = c(1,2,3), exp = c(2,3,4))
-
stack(x)
-
unstack(stacked_x, values~ind)
'R > 기초' 카테고리의 다른 글
R 새로운 종류의 Plot (0) | 2019.08.13 |
---|---|
R 데이터 plot 함수 (0) | 2019.08.13 |
R 데이터 조작 II (0) | 2019.08.13 |
R에서 사용하는 제어문, 함수, 그에따른 연산 (0) | 2019.08.12 |
R에서 사용하는 변수 (0) | 2019.08.12 |