본문 바로가기

데이터 다루기/Base of R

[R] with, within, which 함수

728x90
반응형

안녕하세요, 이번 포스팅에서는 with, within, which 함수에 대하여 알아보도록 하겠습니다.

with 함수와 within 함수는 꼭 필요한 기능은 아니지만, 코딩을 할 때 코드의 행을 줄일 수 있습니다.

코딩을 할 때에, 코드를 한눈에 볼 수 있도록 하는것은 오류나는 부분을 찾기에도 쉽고, 외형적으로도 좋게 보이는 효과가 있습니다.

그리고 which 함수는 내가 찾고자 하는 데이터가 있을 때, 그 데이터에 대한 힌트를 주면 위치를 알려주는 함수입니다.

그럼 이제 본격적으로 3가지 함수에 대해 실습해보도록 하겠습니다.

① with

with

with(data, expression)

with 함수는 데이터 프레임 또는 리스트 내 필드를 필드 이름만으로 접근할 수 있게 해주는 함수입니다. 쉬운 이해를 위해 예제를 살펴보도록 하겠습니다.

with(iris, { 
	print(mean(Sepal.Length)) 
    print(mean(Sepal.Width)) 
}) 
[1] 5.843333 
[1] 3.057333

위의 예시를 보시면, with 함수에 iris를 데이터 인자로 넣으면, 뒤에 data 인자를 필요로 하는 mean 함수에서 iris를 입력하지 않고, 행이름 만으로도 결과가 출력되는 것을 확인하실 수 있습니다.

② within

within

within(data, expression)

within 함수는 표현식에서 보시다시피 with 함수와 매우 유사합니다. 차이점으로는 with함수의 기능에 더해서 데이터를 수정하는 기능까지 제공합니다. within 함수 또한 쉬운 이해를 위해 예시를 보도록 하겠습니다.

eng <- data.frame(name = c("Lee", "Choi", "Park", "You"), eng = c(93,73,83,73)) 
math <- data.frame(name = c("You", "Kawk", "Lee", "Park"), math = c(89,79,69,99)) 
score <- merge(eng, math, by = 'name', all = T) 
  name eng math 
1 Choi  73  NA 
2 Lee   93  69 
3 Park  83  99 
4 You   73  89 
5 Kawk  NA  79 

scoreTmp <- within(score, { 
	eng = ifelse(is.na(eng), median(eng, na.rm = T), eng)
}) 
  name eng math 
1 Choi  73  NA 
2 Lee   93  69 
3 Park  83  99 
4 You   73  89 
5 Kawk  78  79

위의 예시를 보시면, merge 함수를 통해 두 개의 데이터프레임을 합칠 때, all=T 에 의해 NA값이 생성됩니다.

이 때 within 함수를 통해 score의 열이름만 입력하여도, 함수가 실행이 되고, 데이터의 변경이 적용되는 것을 확인할 수 있습니다.

merge 함수에 대한 설명은 아래를 통해 보실 수 있습니다.

 

2019/05/29 - [데이터 다루기/Base of R] - R에서의 데이터 프레임 다루기 (2)

 

 

③ which

which

which(x, arr.ind = FALSE)

which 함수는 원하고자 하는 x의 인덱스를 찾아주는 함수입니다. arr.ind 인자는 x가 행렬이거나 array일 때, which함수를 그대로 쓰면 위치가 출력되는데, 이 때 arr.ind = TRUE로 바꿔주면, 위치가 출력됩니다. 쉬운 이해를 위해 예시를 보도록 하겠습니다.

wch <- c(2,12,5,8,10) 
which(wch > 5) 
[1] 2 4 5 

wch[which(wch > 5)] 
[1] 12 8 10 

m <- matrix(1:12, 3, 4) 
which(m %% 3 == 0) 
[1] 3 6 9 12 

which(m %% 3 == 0, arr.ind = TRUE) 
   row col 
[1,] 3 1 
[2,] 3 2 
[3,] 3 3 
[4,] 3 4

위의 예시를 보시면, which 함수를 통해 5보다 큰 수의 위치인 2,4,5 가 출력되었으며, 위치를 받아드임으로써, 값을 출력하게 할 수 있습니다. 또한 행렬에 대하여 which 함수를 사용하면, 값이 바로 출력되는데, 이는 arr.ind = TRUE를 통해 위치 출력으로 바꿀 수 있음을 확인할 수 있습니다.

반응형