[사용 함수]

함수명

설명

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)
[1845
> 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 각 열의 합계 구하기 벡터 반환
[15 7 9
> apply(mat1[,c(2,3)],2,max)  # 2 열과 3 열의 열방향 최대값 구하기
[15 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]]
[1111
 
[[2]]
[132
 
> sapply(c(list1,list2),max) # 열방향 함수 적용, 결과 vector 반환
[1111  32
> 
> lapply(Fruits[,c(4,5)],max) # 결과가 list
$Sales
[1111
 
$Expenses
[191
 
> 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) # 동일 위치에 있는 값끼리 함수 적용, 결과값 벡터 또는 행렬
[1111 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에서 열방향으로 더한 것과 같다 
[1176 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) # 기본 오름차순
[111 20 33 47 50
> sort(a, decreasing=TRUE) # 내림차순 지정
[150 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
[120 11 33 50 47
> order(a) # 오름차순으로 위치 반환
[12 1 3 5 4
> order(a, decreasing=TRUE) # 내림차순 지정정
[14 5 3 1 2
> order(-a) # 위와 같은 표현 
[14 5 3 1 2
> a[order(a)] # sort(a) 와 같음
[111 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

+ Recent posts