0

リストを含む列の要素を前の値で埋めるのに役立つ関数を探しています。

library(tidyverse)

test <- right_join(
data_frame (Numbers = c(1,3,5,10),
          LotsOflist = c(list(A=1),
                         list(B=2),
                         list(C=3),
                         list(D=4)
                         )),
data_frame(Numbers = 1:10))

test 

# A tibble: 10 × 2
      Numbers LotsOflist
       <dbl>     <list>
1        1  <dbl [1]>
2        2     <NULL>
3        3  <dbl [1]>
4        4     <NULL>
5        5  <dbl [1]>
6        6     <NULL>
7        7     <NULL>
8        8     <NULL>
9        9     <NULL>
10      10  <dbl [1]>

列「LotsOfLists」には、結合のために NULL になっているリストがいくつかあります。NULL を最後のリストに置き換えたい。繰り越された最後のオブジェクトで NA を埋める動物園パッケージの na.locf() と同様に機能するようにしたいと思いますが、リストである列に対して機能するものは何も見つかりませんでした。

test2 <- data_frame(LotsOfNumbers = c(1,2,NA,NA,NA,7))
test2

# A tibble: 6 × 1
       LotsOfNumbers
            <dbl>
1             1
2             2
3            NA
4            NA
5            NA
6             7
library(zoo)

test2 %>% 
  mutate(LotsOfNumbers_Filled = na.locf(LotsOfNumbers))

# A tibble: 6 × 2
        LotsOfNumbers LotsOfNumbers_Filled
            <dbl>                <dbl>
1             1                    1
2             2                    2
3            NA                    2
4            NA                    2
5            NA                    2
6             7                    7

編集:

元の質問には回答がありましたが、列に data.frames がある場合、回答が機能しないことが判明しました。誰でもdata.framesの解決策を見つけることができますか?

 test <- right_join( data_frame (Numbers = c(1,3,5,10),
                            LotsOflist = c(list(data.frame(A=1)), 
                                           list(data.frame(B=2)), 
                                           list(data.frame(C=3)),
                                           list(data.frame(D=4)) )),
                data_frame(Numbers = 1:10)) 
4

2 に答える 2

0

na.locfNULL が NA 値に置き換えられた場合に機能します。

library(zoo)

test %>%
    mutate(LotsOflist = na.locf(replace(LotsOflist, sapply(LotsOflist, is.null), NA)))
于 2017-01-02T17:39:50.767 に答える