Warm tip: This article is reproduced from serverfault.com, please click

r-创建一个优化模型,以便选择开始日期和结束日期会产生一些结果

(r - Create an optimization model such that selecting start date and end date produces some outcome)

发布于 2020-11-28 02:35:04
     21-Oct 28-Oct  4-Nov 11-Nov
22-Apr   90     95      95    95    
29-Apr   95     100     100   100   
6-May    95     100     100   100   
13-May   90     100     100   95    
20-May   90     95      95    90    
27-May   80     85      85    90    
3-Jun    75     80      80    85

`上面的数据显示了开始日期(行)和结束日期(列),并且值以给定开始日期和结束日期的百分比表示结果。我想创建一个优化模型,以便选择开始日期和结束日期会使用R产生结果。

Questioner
Eric
Viewed
0
www 2020-11-28 10:57:42

这个问题的关键是如何根据行和列的名称对数据框进行子集化。在这里,我设计了一个函数来实现此目的。要使用此功能,你可以设置start开始日期,end结束日期和dt数据框。

outcome <- function(start, end, dt){
  out <- dt[rownames(dt) %in% start, colnames(dt) %in% end]
  return(out)
}

# Example:
outcome(start = "29-Apr", end = "28-Oct", dt = dat)
# [1] 100

或者,如评论中所述,你可以直接执行以下操作。

outcome <- function(start, end, dt){
  out <- dt[start, end]
  return(out)
}

数据

dat <- read.table(text = "'22-Apr'   90     95      95    95    
'29-Apr'   95     100     100   100   
'6-May'    95     100     100   100   
'13-May'   90     100     100   95    
'20-May'   90     95      95    90    
'27-May'   80     85      85    90    
'3-Jun'    75     80      80    85", header = FALSE, row.names = 1)

names(dat) <- c("21-Oct", "28-Oct", "4-Nov", "11-Nov")