2017-07-11 14 views
0

利用可能な値がない場合は、別の列の既存の値を使用する新しい列を作成する必要があります。歴史ヶ月間の印象とFuture_impressionsを移入するRはいくつかの基準に基づいて列に値を設定します

Date  Market Campaign Impressions Future_impressions 
1/1/2017 SE  Home  150   150 
1/2/2017 SE  Home  100   100 
1/1/2017 GB  Home  50   50 
1/2/2017 GB  Home  55   55 
1/1/2018 SE  Home  NA   150 
1/2/2018 SE  Home  NA   100 

私が管理している:

Date  Market Campaign Impressions 
1/1/2017 SE  Home  150 
1/2/2017 SE  Home  100 
1/1/2017 GB  Home  50 
1/2/2017 GB  Home  55 
1/1/2018 SE  Home  NA 
1/2/2018 SE  Home  NA 

は私が私を提供します何かを書きたいと思います:

例は、私は次のようなデータを持っていますを使用して:

df$Future_impressions[is.na(df$Impressions)] <- NA 

しかし、私は将来のどのように人口は人口です。印象= NA は、IF - - THEN MATCH(日マイナス12ヶ月)AND MATCH市場やキャンペーンと印象に

を取得するが、私は非常に新しいRのユーザーですが、私の周りに検索した :私は基本的に言って何かを書きたいです広範に、私は冗長な質問をしていないことを願っています!

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

答えて

1

は、ここで使用するオプションですapply

df$Date <- as.Date(df$Date,'%m/%d/%Y') 

get.last.year <- function(dt, mk, cp){ 
    ly <- as.POSIXlt(dt) 
    ly$year <- ly$year - 1 
    ly <- as.Date(ly) 
    x <- df[df$Date == ly & 
     df$Market == mk & 
     df$Campaign == cp, "Impressions"] 
    return(x) 
} 

df$Future.impressions <- apply(df, 1, function(x) ifelse(!is.na(x[["Impressions"]]), x[["Impressions"]], get.last.year(x[["Date"]], x[["Market"]], x[["Campaign"]]))) 
+0

ベースR.における驚くべき答え+1 – Masoud

+0

ワンダフル!ありがとう、マット!あなたは私の一日を作ってくれました:) 他の誰かがこの点を発見したが、より多くのメトリックの値を生成するためにスクリプトを再実行したい場合は、POSIXlt変数にoriginを指定する必要があることに注意してください。私はそれを 'as.POSIXlt(dt、origin =" 2016-06-01 ")としました。 実際の起源の日付はなぜ、どのようにするべきかわかりませんが、これは私にとってはうまくいきました。 –

関連する問題