dplyr
, tidyr
및 imputeTS
패키지의 기능을 사용할 수 있습니다.
먼저, 예제와 비슷한 데이터 프레임을 만듭니다.
# Create example data frame
dt <- data_frame(Order = c(rep(1, 3), rep(2, 4)),
OrderSteps = c(1:3, 1:4),
InputQuantity = c(300.56, NA, NA, 65.89, NA, NA, NA),
OutputQuantity = c(NA, NA, 243.65, NA, NA, NA, 12.54))
dt
# A tibble: 7 x 4
Order OrderSteps InputQuantity OutputQuantity
<dbl> <int> <dbl> <dbl>
1 1 1 300.56 NA
2 1 2 NA NA
3 1 3 NA 243.65
4 2 1 65.89 NA
5 2 2 NA NA
6 2 3 NA NA
7 2 4 NA 12.54
둘째
dt2 <- dt %>%
gather(Type, Value, InputQuantity:OutputQuantity) %>%
arrange(Order, OrderSteps)
dt2
# A tibble: 14 x 4
Order OrderSteps Type Value
<dbl> <int> <chr> <dbl>
1 1 1 InputQuantity 300.56
2 1 1 OutputQuantity NA
3 1 2 InputQuantity NA
4 1 2 OutputQuantity NA
5 1 3 InputQuantity NA
6 1 3 OutputQuantity 243.65
7 2 1 InputQuantity 65.89
8 2 1 OutputQuantity NA
9 2 2 InputQuantity NA
10 2 2 OutputQuantity NA
11 2 3 InputQuantity NA
12 2 3 OutputQuantity NA
13 2 4 InputQuantity NA
14 2 4 OutputQuantity 12.54
셋째 긴 포맷 다양한 형식의 데이터 프레임을 변환 한 데이터 프레임을 필터링하고 NA
을 돌리다.
dt3 <- dt2 %>%
filter(Type %in% "OutputQuantity" | !is.na(Value)) %>%
mutate(Value = na.interpolation(Value))
dt3
# A tibble: 9 x 4
Order OrderSteps Type Value
<dbl> <int> <chr> <dbl>
1 1 1 InputQuantity 300.5600
2 1 1 OutputQuantity 281.5900
3 1 2 OutputQuantity 262.6200
4 1 3 OutputQuantity 243.6500
5 2 1 InputQuantity 65.8900
6 2 1 OutputQuantity 52.5525
7 2 2 OutputQuantity 39.2150
8 2 3 OutputQuantity 25.8775
9 2 4 OutputQuantity 12.5400
마지막으로, dt2
및 dt3
을 병합 한 다음 이전 레코드로 NA
를 입력합니다. 그런 다음 데이터 프레임을 다시 와이드 형식으로 변환하십시오.
dt4 <- dt2 %>%
left_join(dt3, by = c("Order", "OrderSteps", "Type")) %>%
fill(Value.y) %>%
select(-Value.x) %>%
spread(Type, Value.y)
dt4
# A tibble: 7 x 4
Order OrderSteps InputQuantity OutputQuantity
* <dbl> <int> <dbl> <dbl>
1 1 1 300.5600 281.5900
2 1 2 281.5900 262.6200
3 1 3 262.6200 243.6500
4 2 1 65.8900 52.5525
5 2 2 52.5525 39.2150
6 2 3 39.2150 25.8775
7 2 4 25.8775 12.5400
dt4
이 최종 출력입니다.
[재현 가능한 예] (https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)를 게시하십시오 – PoGibas