dplyr, piping 및 spline()
을 사용하여 누락 된 값을 보간하고 싶습니다.dplyr에서 x- 범위의 스플라인() 보간을 첫 번째 및 마지막 비 NA 값으로 어떻게 제한합니까?
데이터 :
test <- structure(list(site = structure(c(3L, 3L, 3L, 3L, 3L, 3L, 1L,
1L, 1L, 1L, 2L, 2L, 2L, 2L), .Label = c("lake", "stream", "wetland"
), class = "factor"), depth = c(0L, -3L, -4L, -8L, -10L, -14L,
0L, -1L, -3L, -5L, 0L, -2L, -4L, -6L), var1 = c(NA, 1L, 3L, NA,
6L, NA, 1L, 2L, NA, 4L, 1L, NA, NA, 4L), var2 = c(1L, NA, 3L,
4L, 8L, NA, NA, NA, NA, NA, NA, 2L, NA, NA)), .Names = c("site",
"depth", "var1", "var2"), class = "data.frame", row.names = c(NA,
-14L))
Q1 : I는 다음의 기능 코드를 사용하지만, 먼저 비 NA
값과 각 변수의 마지막 비 NA
값 사이에 발생하는 보간의 범위를 제한 할되다. 예를 들어, 깊이 -8
에 wetland
의 경우 var1
을 보간하고 깊이가 0
및 -14
인 경우 NA
을 반환해야합니다.
library(tidyverse)
test_int <- test %>%
group_by(site) %>%
mutate_at(vars(c(var1, var2)),
funs("i" = if(sum(!is.na(.)) > 1)
spline(x=depth, y=., xout=depth)[["y"]]
else
NA))
Q2 : 0
에서 Inf
내 보간 값을 결합 할 수있는 방법이 있습니까? 또는 스플라인에 적합하지 않습니까 (예 : smooth
또는 loess
과 같은 다른 보간법을 사용해야합니까?)?
, 적절한 변환을 사용합니다. 즉,'y'를 보간하는 대신'log (y)'(또는'log1p (y)'가 0 일 경우)를 보간 한 다음, 예상에 역변환을 적용합니다. – Gregor
보간 값을 그룹의 최대 값보다 크게 설정 하시겠습니까? 예 :'-8' 깊이의 '습지'는'6.7'입니까? (보간법을'var'의 최대 값과 최소값 내로 제한하기를 원한다면 해결책을 제시 할 수 있습니다.) –
@JensLeerssen 아마도 보간 값을 최대 및 최소 관측 값으로 제한하는 것이 효과적 일 것이라고 생각합니다. –