2017-10-07 9 views
0

を考慮するために、データセットの操作:私はに取得する方法を見つけ出す必要があり考えると反復測定

df <- data.frame(
        CompanyID=c("Drinkers","Drinkers","Drinkers","Drinkers","Drinkers","Drinkers","Drinkers","Drinkers" 
          ,"Drinkers","Drinkers", "Liquders","Liquders","Liquders","PelletCoffeeCo","PelletCoffeeCo"), 
        Email= c("[email protected]", "[email protected]","[email protected]","[email protected]", "[email protected]", 
          "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", 
          "[email protected]","[email protected]","[email protected]","[email protected]", 
         "[email protected]"), 
        Day= c("1","2","3","4","5","6","7","8","9","10","1","2","3","1","2"), 
       var1= c(4,5,5,5,2,3,2,7,6,5,7,6,6,2,3)) 

を:

df2 <- data.frame(CompanyID=c("Drinkers","Drinkers","Drinkers","Drinkers","Drinkers","Drinkers","Drinkers","Drinkers" 
          ,"Drinkers","Drinkers", "Liquders","Liquders","Liquders","Liquders","Liquders","Liquders", 
          "Liquders","Liquders","Liquders","Liquders", "PelletCoffeeCo","PelletCoffeeCo","PelletCoffeeCo", 
          "PelletCoffeeCo","PelletCoffeeCo","PelletCoffeeCo","PelletCoffeeCo","PelletCoffeeCo", 
          "PelletCoffeeCo","PelletCoffeeCo"), 
        Email= c("[email protected]", "[email protected]","[email protected]","[email protected]", "[email protected]", 
          "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", 
          "[email protected]","[email protected]","[email protected]","[email protected]","[email protected]", 
          "[email protected]","[email protected]","[email protected]","[email protected]","[email protected]","[email protected]", 
          "[email protected]","[email protected]","[email protected]","[email protected]", 
          "[email protected]","[email protected]","[email protected]","[email protected]", 
          "[email protected]"), 
        Day= c("1","2","3","4","5","6","7","8","9","10","1","2","3","4","5","6","7","8","9","10", 
         "1","2","3","4","5","6","7","8","9","10"), 
        var1= c(4,5,5,5,2,3,2,7,6,5,7,6,6, NA,NA,NA,NA,NA,NA,NA, 2,3,NA,NA,NA,NA,NA,NA,NA,NA)) 

説明: 私は私が終わっ一日一回人を調査したデータを持っています10日間のコース。完璧な世界では、私はday1:day10と表記される各参加者からの10の応答を持っています。しかし、無回答のため、参加者の中には3つの回答があり、他の人は6人、他は10人などでした。私は成長モデルを実行するためにデータを設定しています。したがってDay1 - 10日目。これらの回答のデータがあるかどうかは関係ありません。私は10日分のデータを持たない行にNAを追加することでこれを実証しようとしました。

どうすればいいですか?

ありがとうございました!

答えて

2

これを試してみてください:

library(tidyr) 

df %>% 
    complete(nesting(CompanyID,Email), Day = seq(min(Day), max(Day), 1L)) %>% 
    data.frame() 

出力:

 CompanyID     Email Day var1 
1  Drinkers  [email protected] 1 4 
2  Drinkers  [email protected] 2 5 
3  Drinkers  [email protected] 3 5 
4  Drinkers  [email protected] 4 5 
5  Drinkers  [email protected] 5 5 
6  Drinkers  [email protected] 6 2 
7  Drinkers  [email protected] 7 3 
8  Drinkers  [email protected] 8 2 
9  Drinkers  [email protected] 9 7 
10  Drinkers  [email protected] 10 6 
11  Liquders  [email protected] 1 7 
12  Liquders  [email protected] 2 NA 
13  Liquders  [email protected] 3 6 
14  Liquders  [email protected] 4 6 
15  Liquders  [email protected] 5 NA 
16  Liquders  [email protected] 6 NA 
17  Liquders  [email protected] 7 NA 
18  Liquders  [email protected] 8 NA 
19  Liquders  [email protected] 9 NA 
20  Liquders  [email protected] 10 NA 
21 PelletCoffeeCo [email protected] 1 2 
22 PelletCoffeeCo [email protected] 2 NA 
23 PelletCoffeeCo [email protected] 3 3 
24 PelletCoffeeCo [email protected] 4 NA 
25 PelletCoffeeCo [email protected] 5 NA 
26 PelletCoffeeCo [email protected] 6 NA 
27 PelletCoffeeCo [email protected] 7 NA 
28 PelletCoffeeCo [email protected] 8 NA 
29 PelletCoffeeCo [email protected] 9 NA 
30 PelletCoffeeCo [email protected] 10 NA 

編集:上記のコードは、デイ値の完全なセットで、各グループの日の列の値を埋め

thの既存の値の最小値と最大値によって定義される列(すなわち、 1および10)。これらの日の値が入力されるグループは、必要に応じて再定義できますが、ここではCompany + Emailとして「ネスティング(CompanyID、Email)」という行を定義しました。 data.frame()の行はちょうど出力をtibbleの代わりにdata.frameに変換するためのものです。 data.frame出力が不要な場合は、その行を置換または削除してください。

+0

恐ろしい!ありがとうございます。それは魅力のように働いた。 他の変数x1:x10がいくつかありますが、同じように動作することを期待しています。 機能を説明できますか?どのように動作するのか分かりますが、どのように完全でネスティングがうまく機能するのかわかりません。なぜ、最後にdata.frameの引数を追加する必要があるのですか? – D500

+0

@ D500 - 問題ありません。上記の説明を参照してください。 – www

0

まず、一意の企業IDのデータフレームを作成します。 次に、目的の日のデータフレームを作成します。

これらを一緒に結合します。

その後、元のデータセットに参加してテーブルに入力します。

comp <- data.frame(CompanyID = unique(df$CompanyID)) 
Day <- data.frame(Day = c("1","2","3","4","5","6","7","8","9","10")) 

compDay <- merge(comp, Day, all = TRUE) 

dfday <- merge(df, compDay, by = c("CompanyID", "Day"), all = TRUE) 
+0

恐ろしい!ありがとうございます。それは魅力のように働いた。 – D500

関連する問題