35622


Rを使用しています。

[code]

    no1,no2,
      1, 14,
      3, 25,
      4, 43,
      6, 65,
    
[/code]

のようなデータフレームがありますが、これはno1=1,2のときno2=14、no1=4,5のときno2=43です。（3つ以上同じ数が連続して省略されることもあります。）  
どのようにすれば

[code]

    no1,no2,
      1, 14,
      2, 14,
      3, 25,
      4, 43,
      5, 43,
      6, 65,
    
[/code]

のような形に変換できるでしょうか。


CC BY-SA 3.0
2017-06-15T16:26:09.657
35613
2017-06-29T04:14:35.097
12457
question
r dplyr
まとめられたデータフレームを展開する


`tidyr` パッケージの `fill` 関数を使うと、 NA値をその列の直前の NA でない値で埋められます。

[code]

    > library(dplyr)
    > library(tidyr)
    > df1 <- dplyr::data_frame(no1 = c(1L,  3L,  4L,  6L),
    +                          no2 = c(14L, 25L, 43L, 65L))
    > dplyr::data_frame(no1 = 1:6) %>%
    +       dplyr::left_join(df1, by = "no1") %>%
    +       tidyr::fill(no2)
    # A tibble: 6 × 2
       no1   no2
      <int> <int>
    1     1    14
    2     2    14
    3     3    25
    4     4    43
    5     5    43
    6     6    65
    
[/code]

## [2017/06/29]コメントを受け追記

> 元データが3スタートの場合1,2のデータがNAになってしまうのですが、何かいいアイデアあるでしょうか？1,2にも3の値を‌​入れる形でかまわないです。
> – user87562

不格好ですが、以下ではどうでしょうか。`fill`関数を逆方向にもう1回実行する方針です。

[code]

    > df1 <- dplyr::data_frame(no1 = c(3L,  4L,  6L), no2 = c(25L, 43L, 65L))
    > dplyr::data_frame(no1 = 1:6) %>%
    +        dplyr::left_join(df1, by = "no1") %>% 
    +        tidyr::fill(no2) %>% 
    +        tidyr::fill(no2, .direction = "up")
    # A tibble: 6 x 2
        no1   no2
      <int> <int>
    1     1    25
    2     2    25
    3     3    25
    4     4    43
    5     5    43
    6     6    65
    
[/code]


CC BY-SA 3.0
2017-06-16T01:14:38.767
35622
2017-06-29T04:14:35.097
2017-06-29T04:14:35.097
8252
8252
35613
answer