2017-03-17 9 views
3

データフレームに欠損値を入力しようとしていますが、すべての変数の組み合わせを望んでいません - 3つの変数のグループ分け:coursecode、年、週。グループ内のdplyr completeを使用してdata.frameに欠損値を記入

私はtidyrライブラリ内)(完全に見てきたが、私はそれを動作させることはできません、でもUsing tidyr::complete with group_byhttps://blog.rstudio.org/2015/09/13/tidyr-0-3-0/

を見た後、私は別の年の特定の週のデータを収集するオブザーバーを持っていますコース。たとえば、1〜10週間の間、大きなデータセットにデータが収集されることがありますが、特定のコースと年度の組み合わせで発生した不足している週だけが気になります。もちろんで 例えば、

  • 年で、データは週1、3、及び4で収集しました。
  • 2週間2が分かります。
  • 私はコースBで他の誰かが、2000年に5週のデータを収集していても、5が欠落しているその週気にしない

例:

library(dplyr) 
library(tidyr) 

df <- data.frame(coursecode = rep(c("A", "B"), each = 6), 
       year = rep(c(2000, 2000, 2000, 2001, 2001, 2001), 2), 
       week = c(1, 3, 4, 1, 2, 3, 2, 3, 5, 3, 4, 5), 
       values = c(1:12), 
       othervalues = c(12:23), 
       region = "Big") 

df 

    coursecode year week values othervalues region 
1   A 2000 1  1   12 Big 
2   A 2000 3  2   13 Big 
3   A 2000 4  3   14 Big 
4   A 2001 1  4   15 Big 
5   A 2001 2  5   16 Big 
6   A 2001 3  6   17 Big 
7   B 2000 2  7   18 Big 
8   B 2000 3  8   19 Big 
9   B 2000 5  9   20 Big 
10   B 2001 3  10   21 Big 
11   B 2001 4  11   22 Big 
12   B 2001 5  12   23 Big 

完全にしてみてください:を(ではない私の所望の出力)

df %>% 
     complete(coursecode, year, region, nesting(week)) 

# A tibble: 20 x 6 
    coursecode year region week values othervalues 
     <fctr> <dbl> <fctr> <dbl> <int>  <int> 
1   A 2000 Big  1  1   12 
2   A 2000 Big  2  NA   NA 
3   A 2000 Big  3  2   13 
4   A 2000 Big  4  3   14 
5   A 2000 Big  5  NA   NA 
6   A 2001 Big  1  4   15 
7   A 2001 Big  2  5   16 
8   A 2001 Big  3  6   17 
9   A 2001 Big  4  NA   NA 
10   A 2001 Big  5  NA   NA 
11   B 2000 Big  1  NA   NA 
12   B 2000 Big  2  7   18 
13   B 2000 Big  3  8   19 
14   B 2000 Big  4  NA   NA 
15   B 2000 Big  5  9   20 
16   B 2001 Big  1  NA   NA 
17   B 2001 Big  2  NA   NA 
18   B 2001 Big  3  10   21 
19   B 2001 Big  4  11   22 
20   B 2001 Big  5  12   23 

所望の出力

coursecode year region week values othervalues 
     <fctr> <dbl> <fctr> <dbl> <int>  <int> 
1   A 2000 Big  1  1   12 
2   A 2000 Big  2  NA   NA 
3   A 2000 Big  3  2   13 
4   A 2000 Big  4  3   14 
5   A 2001 Big  1  4   15 
6   A 2001 Big  2  5   16 
7   A 2001 Big  3  6   17 
8   B 2000 Big  2  7   18 
9   B 2000 Big  3  8   19 
10   B 2000 Big  4  NA   NA 
11   B 2000 Big  5  9   20 
12   B 2001 Big  3  10   21 
13   B 2001 Big  4  11   22 
14   B 2001 Big  5  12   23 

答えて

3

私たちは、あなたが少し遅れて滞在し、私の金曜日の午後には価値が作っexpandleft_join

library(dplyr) 
library(tidyr) 
df %>% 
    group_by(coursecode, year, region) %>% 
    expand(week = full_seq(week, 1)) %>% 
    left_join(., df) 
# coursecode year region week values othervalues 
#  <fctr> <dbl> <fctr> <dbl> <int>  <int> 
#1   A 2000 Big  1  1   12 
#2   A 2000 Big  2  NA   NA 
#3   A 2000 Big  3  2   13 
#4   A 2000 Big  4  3   14 
#5   A 2001 Big  1  4   15 
#6   A 2001 Big  2  5   16 
#7   A 2001 Big  3  6   17 
#8   B 2000 Big  2  7   18 
#9   B 2000 Big  3  8   19 
#10   B 2000 Big  4  NA   NA 
#11   B 2000 Big  5  9   20 
#12   B 2001 Big  3  10   21 
#13   B 2001 Big  4  11   22 
#14   B 2001 Big  5  12   23 
+1

で試すことができます。ありがとうございました!それは奇妙なことですが - dplyrはあなたが書いたコードのプログレスバーを持っていました。今週の初めに私が書いたコードでは、http://stackoverflow.com/questions/42725428/how-to-add-progress-bar-inside -dplyr-chain-in-r ...なぜか不思議です。 – Nova

+0

@JakeKaupp OPは 'complete'で試してみたが動作しなかった – akrun

関連する問題