数据集的复杂子集

时间:2013-10-23 18:13:16

标签: r dataframe

考虑以下数据框:

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     

我无法想出一个简单的方法,如果你有大量的行,暴力是非常低效的。有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:4)

首先,预处理您的数据:

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

然后提取选择的两列:

df2[c("Asset", x)]