[사용 함수]
함수명 | 설명 |
attach() | attach로 올려놓으면 변수 이름만 가지고 사용 가능 |
detach() | attach로 올려놓은 데이터 다시 내림 |
apply() | 행 또는 열방향지정 후 함수 적용, 결과 벡터 또는 행렬 반환 |
lapply() | 열방향 함수 적용, 결과 list 반환 |
sapply() | 열방향 함수 적용, 결과 vector 반환 |
mapply() | 동일 위치에 있는 값끼리 함수 적용, 결과값 벡터 또는 행렬 |
tapply() | 기준값이 factor로 사용됨, 기준값 별로 함수 적용 |
aggregate() | 기준 별로 함수 적용 |
split() | 데이터를 기준별로 분리하고 list 반환 |
subset() | 조건에 맞는 행, 열을 가져오기 |
sort() | 기본 오름차순 정렬 |
order() | data에 대해서 오름차순으로 위치 반환 |
[attach(), detach() 함수]
1 2 3 4 5 6 7 8 | > # attach(), detach() 함수 > library(googleVis) > attach(Fruits) # attach로 올려놓으면 변수 이름만 가지고 사용 가능 > sum(Sales) [1] 845 > detach(Fruits) # attach로 올려놓은 데이터 다시 내림 > sum(Sales) Error: object 'Sales' not found | cs |
[apply계열 함수]
[apply() 함수]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | > # apply() 함수 > mat1 <- matrix(c(1,2,3,4,5,6),nrow=2,byrow=T);mat1 [,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6 > apply(mat1,1,sum) # 1 각 행의 합계 구하고 벡터 반환 [1] 6 15 > apply(mat1,2,sum) # 2 각 열의 합계 구하기 벡터 반환 [1] 5 7 9 > apply(mat1[,c(2,3)],2,max) # 2 열과 3 열의 열방향 최대값 구하기 [1] 5 6 > > > Fruits Fruit Year Location Sales Expenses Profit Date 1 Apples 2008 West 98 78 20 2008-12-31 2 Apples 2009 West 111 79 32 2009-12-31 3 Apples 2010 West 89 76 13 2010-12-31 4 Oranges 2008 East 96 81 15 2008-12-31 5 Bananas 2008 East 85 76 9 2008-12-31 6 Oranges 2009 East 93 80 13 2009-12-31 7 Bananas 2009 East 94 78 16 2009-12-31 8 Oranges 2010 East 98 91 7 2010-12-31 9 Bananas 2010 East 81 71 10 2010-12-31 > apply(Fruits[,4:6],2,sum) # 4열~ 6열의 열방향 합 구하기 Sales Expenses Profit 845 710 135 > apply(Fruits[,4:6],2,summary) # 결과 값이 여러개면 matrix 반환 Sales Expenses Profit Min. 81.00000 71.00000 7 1st Qu. 89.00000 76.00000 10 Median 94.00000 78.00000 13 Mean 93.88889 78.88889 15 3rd Qu. 98.00000 80.00000 16 Max. 111.00000 91.00000 32 > > apply(Fruits[,4],2,sum) # why error? Fruits[,4]가 vector이기 때문 Error in apply(Fruits[, 4], 2, sum) : dim(X)는 반드시 양의 값을 가지는 길이를 가져야 합니다 > apply(Fruits[4],2,sum) # 위 문제 해결 Sales 845 | cs |
[lapply() / sapply() 함수]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | > # lapply() / sapply() 함수 > # sapply(대상, 함수) > > list1 <- list(Fruits$Sales) #Fruits 의 Sales 값만 가져와서 list1 변수에 담음. > list2 <- list(Fruits$Profit) #Fruits 의 Profit 값만 가져와서 list2 변수에 담음. > > #list1 과 list2 에서 max 값을 구하기 > lapply(c(list1,list2),max) # 열방향 함수 적용, 결과 list 반환 [[1]] [1] 111 [[2]] [1] 32 > sapply(c(list1,list2),max) # 열방향 함수 적용, 결과 vector 반환 [1] 111 32 > > lapply(Fruits[,c(4,5)],max) # 결과가 list $Sales [1] 111 $Expenses [1] 91 > sapply(Fruits[,c(4,5)],max) # 결과가 vector Sales Expenses 111 91 | cs |
[mapply() 함수]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | > # mapply() 함수 > # mapply() (적용함수, 대상 ...) > # 데이터 개수가 다 동일해야 함 (직사각형) > vec1 <- c(1,2,3,4,5) > vec2 <- c(10,20,30,40,50) > vec3 <- c(100,200,300,400,500) > > mapply(sum,vec1,vec2,vec3) # 동일 위치에 있는 값끼리 함수 적용, 결과값 벡터 또는 행렬 [1] 111 222 333 444 555 > mapply(summary, Fruits[,4:6]) #대상이 한 개인 경우, sapply와 같음 Sales Expenses Profit Min. 81.00000 71.00000 7 1st Qu. 89.00000 76.00000 10 Median 94.00000 78.00000 13 Mean 93.88889 78.88889 15 3rd Qu. 98.00000 80.00000 16 Max. 111.00000 91.00000 32 > mapply(sum, Fruits[,4],Fruits[,5]) # apply에서 열방향으로 더한 것과 같다 [1] 176 190 165 177 161 173 172 189 152 > apply(Fruits[,c(4,5)],1,sum) 1 2 3 4 5 6 7 8 9 176 190 165 177 161 173 172 189 152 | cs |
[tapply() 함수]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | > # tapply() 함수 > # tapply(계산값, 기준값, 적용함수) > # 기준값이 factor로 사용됨, 기준값 별로 함수 적용 > # 결과물은 array 반환 > tapply(1:10, rep(1,10), sum) 1 55 > tapply(1:10, rep(c(1,2),5),sum) # 홀수를 1그룹, 짝수를 2그룹으로 배치 1 2 25 30 > tapply(Fruits$Sales,Fruits$Fruit,sum) #과일이름(Fruit)별로 판매량(Sales)의 합계 구하기 Apples Bananas Oranges 298 260 287 > tapply(Fruits$Sales,Fruits$Year,sum) #년도별로 합계 판매량 구하기 2008 2009 2010 279 298 268 | cs |
[aggregate() 함수]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | > # aggregate() 함수 > # aggregate(계산 ~ 기준 , 데이터, 함수) > # 결과는 data.frame 형태 tapply는 array인 것과 비교됨 > aggregate(Sales~Year,Fruits,sum) #년도별로 Sales된 수량을 sum한 결과 Year Sales 1 2008 279 2 2009 298 3 2010 268 > aggregate(Sales~Fruit,Fruits,sum) #Fruit별로 Sales된 수량을 sum한 결과 Fruit Sales 1 Apples 298 2 Bananas 260 3 Oranges 287 > aggregate(Sales~Fruit+Year,Fruits,max) #'+ 추가조건' 형태로 조건을 추가 Fruit Year Sales 1 Apples 2008 98 2 Bananas 2008 85 3 Oranges 2008 96 4 Apples 2009 111 5 Bananas 2009 94 6 Oranges 2009 93 7 Apples 2010 89 8 Bananas 2010 81 9 Oranges 2010 98 | cs |
[데이터 분리 함수]
[split() 함수]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | > # split() 함수 > # split(분리대상, 기준값) list로 돌려줌 > split(Fruits, Fruits$Fruit) # Fruit별로 분리 $Apples Fruit Year Location Sales Expenses Profit Date 1 Apples 2008 West 98 78 20 2008-12-31 2 Apples 2009 West 111 79 32 2009-12-31 3 Apples 2010 West 89 76 13 2010-12-31 $Bananas Fruit Year Location Sales Expenses Profit Date 5 Bananas 2008 East 85 76 9 2008-12-31 7 Bananas 2009 East 94 78 16 2009-12-31 9 Bananas 2010 East 81 71 10 2010-12-31 $Oranges Fruit Year Location Sales Expenses Profit Date 4 Oranges 2008 East 96 81 15 2008-12-31 6 Oranges 2009 East 93 80 13 2009-12-31 8 Oranges 2010 East 98 91 7 2010-12-31 | cs |
[subset() 함수]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | > # subset() 함수 > # 조건에 맞는 행, 열을 가져오기 > subset(Fruits, Fruit=="Apples" | Year>=2009) Fruit Year Location Sales Expenses Profit Date 1 Apples 2008 West 98 78 20 2008-12-31 2 Apples 2009 West 111 79 32 2009-12-31 3 Apples 2010 West 89 76 13 2010-12-31 6 Oranges 2009 East 93 80 13 2009-12-31 7 Bananas 2009 East 94 78 16 2009-12-31 8 Oranges 2010 East 98 91 7 2010-12-31 9 Bananas 2010 East 81 71 10 2010-12-31 > subset(Fruits, select=c(Fruit, Year, Location)) # select로 열 추출 Fruit Year Location 1 Apples 2008 West 2 Apples 2009 West 3 Apples 2010 West 4 Oranges 2008 East 5 Bananas 2008 East 6 Oranges 2009 East 7 Bananas 2009 East 8 Oranges 2010 East 9 Bananas 2010 East > subset(Fruits, Year==2010, select=c(Fruit, Sales, Year)) # 복합 Fruit Sales Year 3 Apples 89 2010 8 Oranges 98 2010 9 Bananas 81 2010 | cs |
[데이터 정렬 함수]
[sort() 함수]
1 2 3 4 5 6 | > # sort() 함수 > a<-c(20,11,33,50,47) > sort(a) # 기본 오름차순 [1] 11 20 33 47 50 > sort(a, decreasing=TRUE) # 내림차순 지정 [1] 50 47 33 20 11 | cs |
[order() 함수]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | > # order() 함수 > # data에 대해서 오름차순으로 위치 반환 > a [1] 20 11 33 50 47 > order(a) # 오름차순으로 위치 반환 [1] 2 1 3 5 4 > order(a, decreasing=TRUE) # 내림차순 지정정 [1] 4 5 3 1 2 > order(-a) # 위와 같은 표현 [1] 4 5 3 1 2 > a[order(a)] # sort(a) 와 같음 [1] 11 20 33 47 50 > > # order(조건1, 조건2 , ...) 같은 값에 대해서 다음 기준 적용하도록 > # Profit별 오름차순하고, 동일 값에 대해 Year별 오름차순 > Fruits[order(Fruits$Profit,Fruits$Year),] Fruit Year Location Sales Expenses Profit Date 8 Oranges 2010 East 98 91 7 2010-12-31 5 Bananas 2008 East 85 76 9 2008-12-31 9 Bananas 2010 East 81 71 10 2010-12-31 6 Oranges 2009 East 93 80 13 2009-12-31 3 Apples 2010 West 89 76 13 2010-12-31 4 Oranges 2008 East 96 81 15 2008-12-31 7 Bananas 2009 East 94 78 16 2009-12-31 1 Apples 2008 West 98 78 20 2008-12-31 2 Apples 2009 West 111 79 32 2009-12-31 > > # date 오름차순, sales로 내림차순 > Fruits[order(-as.numeric(Fruits$Date), Fruits$Sales),] Fruit Year Location Sales Expenses Profit Date 9 Bananas 2010 East 81 71 10 2010-12-31 3 Apples 2010 West 89 76 13 2010-12-31 8 Oranges 2010 East 98 91 7 2010-12-31 6 Oranges 2009 East 93 80 13 2009-12-31 7 Bananas 2009 East 94 78 16 2009-12-31 2 Apples 2009 West 111 79 32 2009-12-31 5 Bananas 2008 East 85 76 9 2008-12-31 4 Oranges 2008 East 96 81 15 2008-12-31 1 Apples 2008 West 98 78 20 2008-12-31 > > # date 내림차순, sales로 오름차순 > Fruits[order(Fruits$Date, -Fruits$Sales, decreasing=T),] Fruit Year Location Sales Expenses Profit Date 9 Bananas 2010 East 81 71 10 2010-12-31 3 Apples 2010 West 89 76 13 2010-12-31 8 Oranges 2010 East 98 91 7 2010-12-31 6 Oranges 2009 East 93 80 13 2009-12-31 7 Bananas 2009 East 94 78 16 2009-12-31 2 Apples 2009 West 111 79 32 2009-12-31 5 Bananas 2008 East 85 76 9 2008-12-31 4 Oranges 2008 East 96 81 15 2008-12-31 1 Apples 2008 West 98 78 20 2008-12-31 > > # dplyr 패키지 사용하면 훨씬 간단하게 사용 가능 | cs |
출처 - 경영프로그래밍 강의 자료 (양성병 교수님)
'IT,인터넷 관련 학습 > R언어 학습' 카테고리의 다른 글
[R] stringr 패키지 (0) | 2019.05.12 |
---|---|
[R] dplyr 패키지 (0) | 2019.05.12 |
[R] 함수 I (0) | 2019.05.12 |
[R] 데이터 입력 및 출력 (0) | 2019.05.12 |
[R] 데이타프레임 (data.frame) (0) | 2019.05.11 |