2017-07-11 19 views
0

条件付き結果のテーブルに基づいて新しい変数を作成するRにループを書き込もうとしています。条件テーブルに基づいて新しい変数を生成

私は4つの治療グループ(A、B、C、D)を持っています。各治療グループは、3つの異なる期間(昼食、夕食、夜間)で異なる料金を支払う。

Treatment Group Day Price  Dinnertime Price  Night Price 
A      10     20     7 
B      11     25     8 
C      12     30     9 
D      13     35     10 

の時間が与えられた「時間」として記録される(当日は時間8-17で、夕食は17-19からのものであり、夜は19-0と0-8からです)。

   Hour  Usage 
    Person 1  1   0 
    Person 1  2   0 
    Person 2  20   5 
    Person 3  17   6 

治療群(A、B、CおよびD)と、一日の時間(夜、日、夕食)の両方に基づいて、私は価格の新しいベクトルを作成したいと思います。

理想的には、これらの時間単位の条件に基づいて期間(昼食、夕食、夕食)ごとにダミー変数を作成するのが理想的です。しかし、私のデータセットはかなり大きく(24人の観察/ 1日当たり)、より洗練されたソリューションを探しています。

if group==A & time==night, then price=7 --> and this information saved in a new variable "price" 

何かアドバイス:平易な言葉で

、私はこれをしたいですか?

編集:質問は2つの条件のループについてです。治療グループと料金表を使ってこれを直接データフレームに照会する方法はありますか、それとも手作業で書く必要がありますか?

+0

価格はどこから来るそれは私には明確ではないですが、あなたは( 'カットを使用することができます)'日 – Dambo

+0

価格の時間に時間をリファクタリングするには、単に治療群によって決定されます。先端に感謝します。 2つの条件があるとき、どのようなループを実行できますか?私はちょうど個別に条件を指定するよりも、治療グループとデータフレームを参照することが欲しい – Student

+0

私はあなたがいくつかの詳細を与える必要があると思う。どのようなデータフレームがすでに利用可能なのですか(どちらですか?) 2番目のデータフレームに価格変数を設定しますか? – friep

答えて

0

それぞれの人物が属しているグループの列を、トランザクションを含むデータフレームに含める方法があるとします。次に、このようなものがあなたのために働くかもしれません。

df.pricing <- structure(list(Treatment.Group = c("A", "B", "C", "D"), Day.Price = 10:13, 
          Dinnertime.Price = c(20L, 25L, 30L, 35L), Night.Price = 7:10), 
         .Names = c("Treatment.Group", "Day.Price", "Dinnertime.Price", "Night.Price"), 
         class = "data.frame", 
         row.names = c(NA, -4L)) 

df.transactions <- structure(list(Person = c("Person1", "Person1", "Person2", "Person3", "Person4"), 
            Hour = c(1L, 2L, 20L, 17L, 9L), 
            Usage = c(0L, 0L, 5L, 6L, 2L)), 
          .Names = c("Person", "Hour", "Usage"), 
          class = "data.frame", row.names = c(NA, -5L)) 

# Add the group that each person belongs to 
df.transactions$group <- c("A","A","B","C","D") 

# Get the transaction price 
df.transactions$price <- apply(df.transactions, 1, function(x){ 
               hour <- as.numeric(x[["Hour"]]) 
               price <- ifelse(hour >= 8 & hour <= 16, df.pricing[df.pricing$Treatment.Group == x[["group"]], "Day.Price"], 
                   ifelse((hour > 16 & hour <= 18), df.pricing[df.pricing$Treatment.Group == x[["group"]], "Dinnertime.Price"], 
                     df.pricing[df.pricing$Treatment.Group == x[["group"]], "Night.Price"]))}) 
関連する問題