1

次のデータフレームを検討してください。

df <- data.frame(Asset = c("A", "B", "C"), Historical = c(0.05,0.04,0.03), Forecast = c(0.04,0.02,NA))

#  Asset Historical Forecast
#1     A       0.05     0.04
#2     B       0.04     0.02
#3     C       0.03       NA

だけでなく、変数x。は、R スクリプトの開始時にユーザーによって設定され、または のいずれかxの 2 つの値を取ることができます。x = "Forecast"x = "Historical"

の場合x = "Forecast"、次を返したいと思います: 各資産について、予測が利用可能な場合は「予測」列から適切な数値を返し、それ以外の場合は「履歴」列から適切な数値を返します。以下に示すように、A と B の両方に、以下に返される予測値があります。C には予測値がないため、履歴値が返されます。

   Asset     Return 
 1     A       0.04     
 2     B       0.02     
 3     C       0.03     

ただし、x= "Historical"単に履歴列を返す場合:

   Asset  Historical 
 1     A       0.05     
 2     B       0.04     
 3     C       0.03     

簡単な方法を思いつくことはできません。多数の行がある場合、ブルート フォースは非常に非効率的です。何か案は?

ありがとう!

4

1 に答える 1

4

まず、データを前処理します。

df2 <- transform(df, Forecast = ifelse(!is.na(Forecast), Forecast, Historical))

次に、選択した 2 つの列を抽出します。

df2[c("Asset", x)]
于 2013-10-23T18:36:27.067 に答える