R studios

R 통계 : Theme #3 : 데이터 조작 ( 기본 함수)

Frisbeen 2024. 5. 27. 16:59

apply 계열 함수 → 임의의 함수를 적용한 결과를 얻기 위한

apply(data, margin(적용방향), function)

margin은 1 or 2 값 중 하나인데, 1은 행을 기준으로, 2는 열을 기준으로 Function 적용할지를 선택한다.

데이터 프레임에 임의의 함수를 적용한 결과를 얻기 위한 함수.

즉, 데이터 전체에 대해 함수를 한번에 적용하는 연산 수행을 한다는 것.

apply(iris[,1:4],2,sum)
아이리스 1부터 4번째 열을 기준으로 다 더하겠다는 말이다.
  • lapply or sapply

lapply(data, mean) >> 걍 리스트로 변환 , sapply도 마찬가지 얘는 행렬 or 벡터로 변환

  • tapply
tapply(data,index,funtion)
index = 데이터를 묶을 factor를 지정해야한다. factor가 아니면 자동변환

##예를 들어 iris 데이터들에 대해 species 별 (grouping by species) sepal.length의 평균?
tapply(iris$sepal.Length, iris $ species, mean)

  • mapply
random normal 분포
rnorm(난수 개수,mean, sd)

mapply(rnorm,c(1,2,3),c(0,10,100),c(1,1,1) 
처음 c(1,2,3)은 몇개를 뜻하냐 각각 즉 1,2,3개의 숫자를 각각
두번째 벡터는 이들의 평균을 뜻한다 따라서 1개의 숫자 는 0이다. 평균이 0이어야하니까
세번째 벡터는 표준편차를 뜻하겠다.

ex) mapply(rnorm,c(1,2,3) , c(0,10,100), c(1,1,1)
>
[1] -0.144
[2] 10.840 10.844
[3] 100.7173 100.1313 100.1584 뭐 이런 느낌

doBy package , 그룹으로 묶은 후 함수 호출하기

summaryBy() - 열 값에 따라 그룹으로 묶은 뒤 요약 값 계산

summaryBy(Sepal.Width+Sepal.Length~Species,iris)

order() - 열 값에 따라 데이터 프레임을 정렬

sampleBy- 데이터프레임을 컬럼 값에 따라 그룹으로 묶은 후 sample 추출

ex) sample(~열, frac = 0.1, data = 데이터이름)

데이터 분리 및 병합하기 -split,subset,merge

3.split() - 주어진 조건에 따라 데이터 분리

iris데이터라 치면

split(iris, iris$species)

species에 따라 쫙쫙 결과물 나옴 > 그걸 리스트에 저장해서 준다.

$setosa Sepal.Length Sepal.Width Petal.Length Petal.Width Species 1 5.1 3.5 1.4 0.2 setosa 2 4.9 3.0 1.4 0.2 setosa 3 4.7 3.2 1.3 0.2 setosa 4 4.6 3.1 1.5 0.2 setosa 5 5.0 3.6 1.4 0.2 setosa 6 5.4 3.9 1.7 0.4 setosa

…Etc

  1. subset() - 주어진 조건을 만족하는 데이터를 선택.

subset(iris, Species ==”setosa”)

이렇게 되면 iris데이터 중 조건을 만족하는 특정 부분만 취하여 반환. (setosa종만 추출)

subset(iris,Sepal.Length > 5.0 & Sepal.Width > 4.0) 여기에 더해 + select(c(”species”) 이렇게 작성해도. ㅇㅋ

  1. Merge() - 데이터를 공통된 값에 기준해 병합

이 둘을 merge(x,y)하면 공동된 값 name에 따라 병합됨.

x가 만약

name math

a 1

b 2

c 3

y가 만약

name English

c 4

b. 5

a 6

따라서 두개 merge를 하면

name math English

a 1 6

b. 2 5

c. 3 4

데이터 프레임 컬럼에 접근하기

  1. with(), within()

필드 이름만으로 (열의 이름만으로) 데이터에 바로 접근 가능하게 하는것.

##with()
sepal_Length_mean = with(iris, mean(Sepal.Length)) 

##within() -- with와 비슷한 기능이지만 이미 저장된 값을 손쉽게 변경하는 기능 또한 제공한다.
x = data.frame(val=c(1,2,3,4,NA,5,NA)))

x = within(x,{val= ifelse(is.na(val),median(val,na.rm=TRUE),val)})

원래는 val = ifelse가 아니라 x$val= ifelse().. 이런식으로 썼어야했다.

  1. attach(), detach()
##attach() - 얘 하는 순간 열 이름만으로 데이터를 곧바로 접근가능함
attach(iris)
head(Sepal.Width)

##detach() - 저거 해제
detach(iris)
head(Sepal.width