DBILITY

R doBy package ,aggregate 사용하기 본문

statistics/R

R doBy package ,aggregate 사용하기

DBILITY 2018. 11. 26. 20:02
반응형

R을 이용한 데이터 분석 실무를 참고하자.

 

doBy 패키지는 summaryBy(), orderBy(), splitBy(), sampleBy()와 같이 데이터프레임에서 특정 값에 따라 데이터를 처리한다.

summaryBy() 컬럼값에 따라 그룹핑 후 처리

sampleBy() 컬럼값에 따라 그룹핑 후 샘플 추출

orderBy() 컬럼값에 따라 정렬

 

패키지가 설치가 안된 경우 install.packages("doBy") 또는 Rstudio package패널에서 설치한다.

formula(수식)은 + 는 연결, - 는 제외, 앞은 대상 ~ 기준 형태로 기준을 나타낸다.

 

aggregate()함수는 일반적인 집계연산에 적용 가능하다.

> install.packages("doBy")
Installing package into ‘C:/Users/사용자/Documents/R/win-library/3.5’
(as ‘lib’ is unspecified)
trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.5/doBy_4.6-2.zip'
Content type 'application/zip' length 3568208 bytes (3.4 MB)
downloaded 3.4 MB

package ‘doBy’ successfully unpacked and MD5 sums checked

The downloaded binary packages are in
	C:\Users\사용자\AppData\Local\Temp\Rtmp0OqVCM\downloaded_packages
> library("doBy")
#전체에 대한 요약정보
> summary(iris)
  Sepal.Length    Sepal.Width     Petal.Length  
 Min.   :4.300   Min.   :2.000   Min.   :1.000  
 1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600  
 Median :5.800   Median :3.000   Median :4.350  
 Mean   :5.843   Mean   :3.057   Mean   :3.758  
 3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100  
 Max.   :7.900   Max.   :4.400   Max.   :6.900  
  Petal.Width          Species  
 Min.   :0.100   setosa    :50  
 1st Qu.:0.300   versicolor:50  
 Median :1.300   virginica :50  
 Mean   :1.199                  
 3rd Qu.:1.800                  
 Max.   :2.500        
#열에 대한 분위별 보기          
> quantile(iris$Sepal.Length)
  0%  25%  50%  75% 100% 
 4.3  5.1  5.8  6.4  7.9 
> quantile(iris$Sepal.Length,seq(0,1,by = 0.25))
  0%  25%  50%  75% 100% 
 4.3  5.1  5.8  6.4  7.9 
> quantile(iris$Sepal.Length,seq(0,1,by = 0.1))
  0%  10%  20%  30%  40%  50%  60%  70%  80%  90% 100% 
4.30 4.80 5.00 5.27 5.60 5.80 6.10 6.30 6.52 6.90 7.90 

#iris데이터에서 Species를 기준으로 Sepal.Length,Sepal.Width의 요약정보를 표시
> summaryBy(Sepal.Length+Sepal.Width ~ Species,iris)
     Species Sepal.Length.mean Sepal.Width.mean
1     setosa             5.006            3.428
2 versicolor             5.936            2.770
3  virginica             6.588            2.974
> aggregate(cbind(Sepal.Length,Sepal.Width)~Species,iris,mean)
     Species Sepal.Length Sepal.Width
1     setosa        5.006       3.428
2 versicolor        5.936       2.770
3  virginica        6.588       2.974

> a<-c(1,3,2,5,4)
#벡터의 순서 인덱스 표시
> order(a)
[1] 1 3 2 5 4
#순서인덱스로 벡터에서 값 추출
> a[order(a)]
[1] 1 2 3 4 5
#iris데이터를 1차 Sepal.Width , 2차 Sepal.Length 정렬 후 head로 6개만 표시
> head(iris[order(iris$Sepal.Width,iris$Sepal.Length),])
    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
61           5.0         2.0          3.5         1.0 versicolor
63           6.0         2.2          4.0         1.0 versicolor
120          6.0         2.2          5.0         1.5  virginica
69           6.2         2.2          4.5         1.5 versicolor
42           4.5         2.3          1.3         0.3     setosa
94           5.0         2.3          3.3         1.0 versicolor
> head(orderBy(~Sepal.Width+Sepal.Length,iris))
    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
61           5.0         2.0          3.5         1.0 versicolor
63           6.0         2.2          4.0         1.0 versicolor
120          6.0         2.2          5.0         1.5  virginica
69           6.2         2.2          4.5         1.5 versicolor
42           4.5         2.3          1.3         0.3     setosa
94           5.0         2.3          3.3         1.0 versicolor

#iris데이터를 1차 Species, 2차 Sepal.Width , 3차 Sepal.Length 정렬 후 head로 6개만 표시
> head(iris[order(iris$Species, iris$Sepal.Width,iris$Sepal.Length),])
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
42          4.5         2.3          1.3         0.3  setosa
9           4.4         2.9          1.4         0.2  setosa
14          4.3         3.0          1.1         0.1  setosa
39          4.4         3.0          1.3         0.2  setosa
13          4.8         3.0          1.4         0.1  setosa
46          4.8         3.0          1.4         0.3  setosa
> head(orderBy(~Species+Sepal.Width+Sepal.Length,iris))
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
42          4.5         2.3          1.3         0.3  setosa
9           4.4         2.9          1.4         0.2  setosa
14          4.3         3.0          1.1         0.1  setosa
39          4.4         3.0          1.3         0.2  setosa
13          4.8         3.0          1.4         0.1  setosa
46          4.8         3.0          1.4         0.3  setosa

#표본추출 1:5의 범위에서 3개를 비복원추출로 가중치를  4가 가장 많이 나오게 순서대로 준 경우
#반복시행(독립중복시행) 결과
> sample(1:5,3, replace = FALSE, prob = c(1,1,1,10,1))
[1] 4 2 3
> sample(1:5,3, replace = FALSE, prob = c(1,1,1,10,1))
[1] 2 1 4
> sample(1:5,3, replace = FALSE, prob = c(1,1,1,10,1))
[1] 4 5 2
> sample(1:5,3, replace = FALSE, prob = c(1,1,1,10,1))
[1] 4 2 3
#Species를 기준으로 0.1(10%)를 iris 데이터에서 표본추출
> sampleBy(~Species,frac = 0.1,data = iris)
              Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
setosa.11              5.4         3.7          1.5         0.2     setosa
setosa.12              4.8         3.4          1.6         0.2     setosa
setosa.28              5.2         3.5          1.5         0.2     setosa
setosa.31              4.8         3.1          1.6         0.2     setosa
setosa.35              4.9         3.1          1.5         0.2     setosa
versicolor.53          6.9         3.1          4.9         1.5 versicolor
versicolor.55          6.5         2.8          4.6         1.5 versicolor
versicolor.79          6.0         2.9          4.5         1.5 versicolor
versicolor.83          5.8         2.7          3.9         1.2 versicolor
versicolor.94          5.0         2.3          3.3         1.0 versicolor
virginica.113          6.8         3.0          5.5         2.1  virginica
virginica.117          6.5         3.0          5.5         1.8  virginica
virginica.120          6.0         2.2          5.0         1.5  virginica
virginica.122          5.6         2.8          4.9         2.0  virginica
virginica.147          6.3         2.5          5.0         1.9  virginica

 

반응형
Comments