2017-05-08 7 views
1

관심있는 데이터 (종의 존재) 값이 1이고 나머지가 0 (부재) 또는 NA 인 래스터가 있습니다. magrittr과 dplyr을 사용하려고합니다. 파이프 내에서 0 값을 모두 NA로 변경하고 나중에 래스터를 트림하고 종의 데이터의 최소 및 최대 좌표를 구할 수 있습니다 (값 = 1)%> % 파이프 내 래스터 값 변경

그러나, NA에 0 값을 변경하면 내가 일반적으로 같은과 함께 할 것입니다 무언가이다 :

raster[values(raster) == 0] <- NA 

내가 magrittr으로, "오른쪽에서 왼쪽으로"문제 작업의 종류의 일을 가지고 (수 그들은 끝났어?). 내가 names() <-setNames()에 의해 exchanched 될 수 있음을, 또는 작업 표시를 사용하도록``기호를 사용할 수 있다는 것을 배웠습니다 (예 : raster %>% * (raster2) 다른 래스터에 의해 곱)`

작동 동등한 결과를 얻을 수있는 방법이 있나요 파이프 는요?

감사합니다 !!!

+3

'zero_to_na <-function (x) {x [values ​​(x) == 0] <- NA; x}'를 만들고 파이프에서 이것을 사용하십시오 :'raster %> % zero_to_na'. 결국 R은 함수형 언어입니다. 의도를 명확하게하는 함수를 작성하는 것을 두려워하지 마십시오. – MrFlick

+0

위대한, 그게 좋은 방법이야! 고마워요 @MrFlick, 그것은 완전히 작동합니다. 그러나 이미 구현 된 방법이 있다면 궁금해합니다 ... 내가 뭔가를 놓치고 있는지 또는 파이프 용으로 번역하기가 쉽지 않은 일이 있는지를 알지 못합니다. (모두 그 오른쪽에서 왼쪽 작업) –

답변

2

한 가지 방법은 사용하는 것입니다 raster::reclassify :

library(raster) 
library(magrittr) 
r <- raster(matrix(0:3, 2)) 

r %>% reclassify(c(0, 0, NA), right=NA) 

이도 (어쨌든, 더 큰 래스터에!) @ MrFlick의 좋은 zero_to_na 제안 어느 때보 약간 빠를 수 있습니다, 경우에 당신이를 많이하고있는 이 물건. 단점은 분명히 덜 우아하다는 것입니다.

r <- raster(matrix(rbinom(1e6, 1, 0.5), 1e3)) 
microbenchmark::microbenchmark(
    this=r %>% reclassify(c(0, 0, NA), right=NA), 
    that=r %>% zero_to_na) 

Unit: milliseconds 
expr  min  lq  mean median  uq  max neval cld 
this 21.77720 22.85843 32.48079 25.05024 26.05527 168.1101 100 a 
that 29.46083 31.37556 56.32881 33.48350 38.05476 202.8740 100 b 
+0

위대한, 이것이 내가 정확히 무엇을 찾고 있었는지. 사실, 나는 잠수함을 가지고 시험해보고 있었지만, 어떤 이유로 그것을 설치하지 못했습니다. 그것은 나를 위해 충분히 우아하다! 감사! –