2016-07-20 6 views
1

を転嫁ではない、私はこのようになりますデータフレームがあります。充填/再拡大シーケンスでは、欠損値、

library(dplyr) 
df <- expand.grid(
    id = 1:3, 
    key = 1:10) %>% 
    filter(!(id == 1 & key <= 4)) %>% 
    filter(!(id == 2 & key %in% c(1:3, 6, 7, 10))) %>% 
    filter(!(id == 3 & key %in% c(1, 2, 4, 5, 7:10))) %>% 
    arrange(id, key) %>% 
    cbind(value = c(10, 11, 15, 17, 20, 30, 1, 6, 8, 100, 0.2, 0.7)) 
  • id == 1key == 10
  • id == 2に行くkey == 9
  • id == 3に行くに行きますkey == 6

私はkeyの整数の列を塗りつぶし/再展開したいのですが、値はNAになります(これは代用の問題ではありません)。

だからid == 3私はキー1、 2、3の値を持つ、4、5、6 ... ==事前にNA

ありがとう!

+1

tidyrの「完了」の仕事のようです。データセットの各IDまたは全体の中の 'key'の最大値まで拡大したいですか?そして、「キー」は1から始めるべきですか? – aosmith

+1

あなたは答えに一致するようにタグを編集する必要はありません。あなたが尋ねたときに気にしていたことをタグに付けておいても問題ありません。 – Frank

+1

@Frankが頭をアップしてくれてありがとう!将来の検索/検索ユーザーのために質問にもっとアクセスしやすくしようとしています。 – emehex

答えて

4

皮肉completeという名前のパイプにもう一枚を追加します。

library(tidyr) 
df <- expand.grid(
    id = 1:3, 
    key = 1:10) %>% 
    filter(!(id == 1 & key <= 4)) %>% 
    filter(!(id == 2 & key %in% c(1:3, 6, 7, 10))) %>% 
    filter(!(id == 3 & key %in% c(1, 2, 4, 5, 7:10))) %>% 
    arrange(id, key) %>% 
    cbind(value = c(10, 11, 15, 17, 20, 30, 1, 6, 8, 100, 0.2, 0.7)) %>% 
    complete(id, key) 
# id key value 
# 1 1 3 NA 
# 2 1 4 NA 
# 3 1 5 10.0 
# 4 1 6 11.0 
# 5 1 7 15.0 
# 6 1 8 17.0 
# 7 1 9 20.0 
# 8 1 10 30.0 
# 9 2 3 NA 
# 10 2 4 1.0 

編集

データ使用中のキーを越えて行くには:

complete(df, id, key = 1:10) 
+0

素晴らしい。キーが1で始まらないとどうなりますか? '%>%rbind(c(id = 1、key = 1、value = NA))'を解凍してからcomplete()を使いました。 complete()にfill引数があるようですが、それを動作させることはできませんか? – emehex

+0

@alistaireのように見える私の心を読んで! – emehex

+1

はい、 'key'を超えて拡張したい場合は、シーケンスを定義してください。 –

3

したい場合1から始まり、keyの最大値になるまで、それぞれid

library(dplyr) 
library(tidyr) 

df %>% group_by(id) %>% complete(key = seq(max(key))) 
## Source: local data frame [25 x 3] 
## Groups: id [3] 
## 
##  id key value 
## <int> <int> <dbl> 
## 1  1  1 NA 
## 2  1  2 NA 
## 3  1  3 NA 
## 4  1  4 NA 
## 5  1  5 10 
## 6  1  6 11 
## 7  1  7 15 
## 8  1  8 17 
## 9  1  9 20 
## 10  1 10 30 
## # ... with 15 more rows