>

매월 측정되는 여러 위치가있는 대규모 데이터 집합을 사용하고 있지만 각 사이트마다 측정 횟수와 NA가 다르기 때문에 시계열이 끊어집니다. 이 문제를 해결하기 위해 보간 기술을 사용하여 간격을 메우기 위해 각 사이트에서 반복되는 for 루프를 만들었습니다. 이로부터 보간 출력을 얻었으며 이상적으로 원래 데이터 세트에 다시 추가하고 싶습니다. 예를 들면 다음과 같습니다.

library(imputeTS)
Sites = c(rep("A", 5), rep("B", 4), rep("C", 10))
Meas = c(25,20,NA,21,NA,23,21,22,26,27,15,20,NA,25,NA,28,28,27,NA)
df= data.frame(Sites, Meas)
for(i in Sites) {
d = subset(df, Sites = i)
d$fit = na.interpolation(d$Meas)
}

필요한 것은 d $fit을 가져 와서 새로운 열 df $fit에 다시 일치시켜 측정 횟수와 각 사이트가 올바르게 일치하는 것입니다. 내 접근 방식에 대한 제안이나 완전한 점검이 있습니까? 미리 감사드립니다!


  • 답변 # 1

    실제로 루프가 필요한 것은 아닙니다. 이 특정 작업을 ave() 로 수행 할 수 있습니다  기능

    df$fit <- ave(df$Meas, df$Sites, FUN=na.interpolation)
    
    
    이 경우이 함수는 na.interpolation 를 적용합니다.  각 Meas 에 기능  다른 Sites 값 각각에 대한 값  그런 다음 모든 것을 올바른 순서로 되돌립니다.

    더 복잡한 무언가를 위해 사용할 수있는 또 다른 전략은 split/unsplit 입니다. . 와 같은 것

    ss <- split(df$Meas, df$Sites)
    df$fit <- unsplit(lapply(ss, na.interpolation), df$Sites)
    
    

  • 이전 html - 줄 바꿈없이 임의의 수의 열이있는 그리드 컨테이너
  • 다음 c++ - "Hello, world!"데스크톱 응용 프로그램 QT를 실행하려고하면 여러 오류가 발생합니다