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

以及变量xx由用户在 R 脚本的开头设置,并且可以采用两个值:要么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))

然后提取选择的两列:

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