[R 프로그래밍] apply, lapply, sapply, tapply, mapply, by

2016. 4. 23. 20:47·IT기술 관련/빅데이터 관련
반응형

1. apply - 적용한 함수 값을 리스트로 반환 

 

> (성적 <- read.table("성적.txt", header=TRUE)[-1])  # 성적.txt 파일에서 첫 열을 제거.
   국어 수학 영어
1     8    7    2
2     6    5    7
3     9    4    9
4     4    5    7
5     5    8    9
6     5    9    6
7     4    7   10
8    10   10    9
9     7    5    4
10    7    7    5

 

> apply(성적, 1, sum)  # 행 단위의 계산(합계) 값을 벡터로 출력한다.
 [1] 17 18 22 16 22 20 21 29 16 19
​
> apply(성적, 1, mean) # 행 단위의 계산(평균) 값을 벡터로 출력한다.
 [1] 5.666667 6.000000 7.333333 5.333333 7.333333 6.666667 7.000000 9.666667 5.333333 6.333333
​
​
> round(apply(성적, 1, mean),1) # round() 함수로 소수점 1자리까지 반올림.
 [1] 5.7 6.0 7.3 5.3 7.3 6.7 7.0 9.7 5.3 6.3
​
​
> apply(성적, 2, sum)  # 열 단위의 계산(합계) 값을 벡터로 출력한다.
국어 수학 영어 
  65   67   68 
​​
> apply(성적, 2, mean) # 열 단위의 계산(평균) 값을 벡터로 출력한다.
국어 수학 영어 
 6.5  6.7  6.8 

 


요약 함수가 아닌 각각의 요소 값에 적용되는 함수의 예제

 

> apply(성적, 1, function(x){x*2})
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
국어   16   12   18    8   10   10    8   20   14    14
수학   14   10    8   10   16   18   14   20   10    14
영어    4   14   18   14   18   12   20   18    8    10



> apply(성적, 2, function(x){x*2})
      국어 수학 영어
 [1,]   16   14    4
 [2,]   12   10   14
 [3,]   18    8   18
 [4,]    8   10   14
 [5,]   10   16   18
 [6,]   10   18   12
 [7,]    8   14   20
 [8,]   20   20   18
 [9,]   14   10    8
[10,]   14   14   10



> 성적 * 2
   국어 수학 영어
1    16   14    4
2    12   10   14
3    18    8   18
4     8   10   14
5    10   16   18
6    10   18   12
7     8   14   20
8    20   20   18
9    14   10    8
10   14   14   10


​> 성적 * function(x){x*2}
Error in FUN(left, right) : non-numeric argument to binary operator


위와 같이 상수가 아닌 경우 직접적인 계산 함수를 적용할 수 없기 때문에 apply() 함수를 사용한다.



​

2. lapply(list apply) - 적용한 함수 값을 리스트로 반환 

​
> 성적 <- read.table("성적.txt", header=TRUE) # 성적.txt 파일을 읽어서 성적이라는 변수에 저장한다.
​
> 성적
   학번 국어 수학 영어
1     1    8    7    2
2     2    6    5    7
3     3    9    4    9
4     4    4    5    7
5     5    5    8    9
6     6    5    9    6
7     7    4    7   10
8     8   10   10    9
9     9    7    5    4
10   10    7    7    5
​

> 성적 <- 성적[-1] # 성적데이터에서 학번열을 제거한다.
​
> 성적
   국어 수학 영어
1     8    7    2
2     6    5    7
3     9    4    9
4     4    5    7
5     5    8    9
6     5    9    6
7     4    7   10
8    10   10    9
9     7    5    4
10    7    7    5

​

> lapply(성적, sum) $국어 [1] 65 $수학 [1] 67 $영어 [1] 68

​

> lapply(성적, mean) $국어 [1] 6.5 $수학 [1] 6.7 $영어 [1] 6.8 

 

 

 

​

3. sapply(simple apply) - 적용한 함수 값을 벡터나 행렬로 반환

 

> 성적 <- read.table("성적.txt", header=TRUE) # 성적.txt 파일을 읽어서 성적이라는 변수에 저장한다.
> 성적
   학번 국어 수학 영어
1     1    8    7    2
2     2    6    5    7
3     3    9    4    9
4     4    4    5    7
5     5    5    8    9
6     6    5    9    6
7     7    4    7   10
8     8   10   10    9
9     9    7    5    4
10   10    7    7    5
​
> 성적 <- 성적[-1] # 성적데이터에서 학번열을 제거한다.
​
> 성적
   국어 수학 영어
1     8    7    2
2     6    5    7
3     9    4    9
4     4    5    7
5     5    8    9
6     5    9    6
7     4    7   10
8    10   10    9
9     7    5    4
10    7    7    5
​
> sapply(성적, sum)  # 각각의 열의 합계를 구한다.
국어 수학 영어 
  65   67   68 
​
> sapply(성적, mean) # 각각의 열의 평균을 구한다.
국어 수학 영어 
 6.5  6.7  6.8 

 

​

참고로 unlist() 함수를 적용해서 lapply()에 적용하면 sapply() 와 동일한 결과가 된다.

​
> unlist(lapply(성적, sum))
국어 수학 영어 
  65   67   68

> sapply(성적, sum)  # 각각의 열의 합계를 구한다.
국어 수학 영어 
  65   67   68

 


4. tapply(table apply) - 그룹으로 묶은 후 함수를 적용, 적용 값을 벡터나 행렬로 반환

tapply( data, Index, function .. ) 

 

index : 그룹지을 값을 지정한다.

 

> 환자 <- read.table("환자.txt", header=TRUE)
> 환자
  환자번호     입원일 나이 합병증      증세
1        1 2014-10-15   25  Type1      Poor
2        2 2014-11-01   34  Type2  Improved
3        3 2014-10-21   28  Type1 Excellent
4        4 2014-10-28   52  Type1      Poor
5        5 2014-11-01   37  Type2  Improved
6        6 2014-11-01   40  Type2  Improved

 
> factor(환자$합병증)
[1] Type1 Type2 Type1 Type1 Type2 Type2
Levels: Type1 Type2
​
> tapply(환자$합병증, 환자$합병증, length) # 합병증의 그룹별 환자의 수
Type1 Type2 
    3     3 
​
> tapply(환자$나이, 환자$합병증, mean)     # 합병증의 그룹별 나이의 평균
Type1 Type2 
   35    37 

 


​

5. mapply(multi simple apply) - 여러 개의 리스트에 함수를 적용

​

> m1 <- list(a = c(1:10), b = c(11:20))
> m2 <- list(c = c(21:30), d = c(31:40))
​

​> mapply(sum, m1$a, m2$d) # 2개의 리스트에 적용
 [1] 32 34 36 38 40 42 44 46 48 50

​


> mapply(sum, m1$a, m1$b, m2$c, m2$d) # 2개의 리스트에 적용
 [1]  64  68  72  76  80  84  88  92  96 100
​

 

​

​6. by - 특정한 그룹으로 묶어서 함수를 적용

​ 

> 성적 <- read.table("성적2.txt", header=TRUE)
> 성적 <- 성적[,c(-1,-2)]
> 성적
   국어 수학 영어 반
1     8    7    2  1
2     6    5    7  1
3     9    4    9  1
4     4    5    7  1
5     5    8    9  1
6     5    9    6  1
7     4    7   10  1
8    10   10    9  1
9     7    5    4  1
10    7    7    5  1
11    6    4    9  2
12    6    5    8  2
13    5    5    4  2
14    4    6   10  2
15    5    8    4  2
16    9    7    8  2
17   10   10    4  2
18    6    8    6  2
19    5    6    5  2
20    8    8    9  2



> by(성적[, 1:3], 성적$반, colMeans)
성적$반: 1
국어 수학 영어
 6.5  6.7  6.8
------------------------------------------------------------------------------
성적$반: 2
국어 수학 영어
 6.4  6.7  6.7



> by(성적[, 1:3], 성적$반, colSums)
성적$반: 1
국어 수학 영어
  65   67   68
------------------------------------------------------------------------------
성적$반: 2
국어 수학 영어
  64   67   67




> by(성적[, 3:5], 성적$반, summary)
성적$반: 1
      국어            수학            영어     
 Min.   : 4.00   Min.   : 4.00   Min.   : 2.00 
 1st Qu.: 5.00   1st Qu.: 5.00   1st Qu.: 5.25 
 Median : 6.50   Median : 7.00   Median : 7.00 
 Mean   : 6.50   Mean   : 6.70   Mean   : 6.80 
 3rd Qu.: 7.75   3rd Qu.: 7.75   3rd Qu.: 9.00 
 Max.   :10.00   Max.   :10.00   Max.   :10.00 
------------------------------------------------------------------------------
성적$반: 2
      국어           수학            영어     
 Min.   : 4.0   Min.   : 4.00   Min.   : 4.00 
 1st Qu.: 5.0   1st Qu.: 5.25   1st Qu.: 4.25 
 Median : 6.0   Median : 6.50   Median : 7.00 
 Mean   : 6.4   Mean   : 6.70   Mean   : 6.70 
 3rd Qu.: 7.5   3rd Qu.: 8.00   3rd Qu.: 8.75 
 Max.   :10.0   Max.   :10.00   Max.   :10.00

[출처] apply, lapply, sapply, tapply, mapply, by (R 활용)|작성자 로그인


성적.txt


성적2.txt


인수구201411.csv


환자.txt


반응형
저작자표시 (새창열림)

'IT기술 관련 > 빅데이터 관련' 카테고리의 다른 글

[R 프로그래밍] 데이터 프레임에서 두개의 랜덤값 뽑아내기  (0) 2016.04.25
[R 프로그래밍] 두개의 문자열 합치기  (0) 2016.04.25
[R 프로그래밍] apply 함수군 (lapply, sapply, tapply) R 프로그래밍  (0) 2016.04.23
[R 프로그래밍] [R] 몫과 나머지 (quotient and remainder)  (0) 2016.04.19
[Rstudio] Rstudio (치명적 오류: 접근 거부 - Fatal error: access denied) 해결  (3) 2016.03.14
'IT기술 관련/빅데이터 관련' 카테고리의 다른 글
  • [R 프로그래밍] 데이터 프레임에서 두개의 랜덤값 뽑아내기
  • [R 프로그래밍] 두개의 문자열 합치기
  • [R 프로그래밍] apply 함수군 (lapply, sapply, tapply) R 프로그래밍
  • [R 프로그래밍] [R] 몫과 나머지 (quotient and remainder)
호레
호레
창업 / IT / 육아 / 일상 / 여행
    반응형
  • 호레
    Unique Life
    호레
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 법률
        • 기본
        • 개인정보보호법
        • 정보통신망법
        • 전자금융거래법
        • 전자금융감독규정
        • 신용정보법
        • 온라인투자연계금융업법
      • 창업
        • 외식업 관련
        • 임대업 관련
        • 유통업 관련
        • 세무 관련
        • 마케팅 관련
        • 기타 지식
        • 트렌드
        • Youtube
      • IT기술 관련
        • 모바일
        • 윈도우
        • 리눅스
        • MAC OS
        • 네트워크
        • 빅데이터 관련
        • A.I 인공지능
        • 파이썬_루비 등 언어
        • 쿠버네티스
        • 기타 기술
      • 퍼블릭 클라우드 관련
        • Azure
        • GCP
        • AWS
      • 정보보안 관련
        • QRadar
        • Splunk
        • System
        • Web
      • 기타
        • 세상 모든 정보
        • 서적
      • 게임 관련
        • 유니티
      • 부동산
      • 맛집 찾기
        • 강남역
        • 양재역
        • 판교역
        • ★★★★★
        • ★★★★
        • ★★★
        • ★★
        • ★
      • 결혼_육아 생활
        • 리얼후기
        • 일상
        • 육아
        • 사랑
        • Food
      • 영어
        • 스피킹
        • 문법
        • 팝송
        • 영화
      • K-컨텐츠
        • 드라마
        • 영화
        • 예능
      • 독서
      • 프로젝트 관련 조사
        • 시스템 구축
        • 로그 관련
        • 웹
        • APT
        • 모의 해킹
        • DB
        • 허니팟
        • 수리카타
        • 알고리즘
        • FDS
      • 기업별 구내 식당 평가
        • 한국관광공사
        • KT telecop
        • KT M&S
        • KT powertel
        • KT cs 연수원
        • 진에어
      • 대학 생활
        • 위드윈연구소
        • 진로 고민
        • 채용정보
        • 자동차
        • 주식
        • 악성코드
        • 게임 보안
      • 쉐어하우스
  • 블로그 메뉴

    • 홈
    • 게임 관련
    • IT 기술 관련
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    판교역
    판교
    AWS
    점심
    마케팅
    런치
    쥬쥬랜드
    판교맛집
    상호관세
    이재곧죽습니다
    수제버거
    돈까스
    수제버거맛집
    복리후생
    맛집
    보안가이드
    대통령
    수제버거존맛
    무역전쟁
    유니티
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
호레
[R 프로그래밍] apply, lapply, sapply, tapply, mapply, by
상단으로

티스토리툴바