R + 中的模拟和场景帮助功能

Simulation and Scenarios in R + help for function

假设我有以下内容。

A table 输入数据

table <- data.frame(id=c(1,2,3,4,5,6),
                      cost=c(100,200,300,400,500,600))

可能的结果列表和关联概率

values<-list(c(1),
             c(0.5),
             c(0))

不同场景的模拟

esc<-sample(1:3,100,replace=T)

如何添加包含下一个公式的新列?

id cost final
1  100  100*ifelse(esc[1]==1,values[[1]],ifelse(esc[1]==2,values[[2]],values[[3]]))
2  200  200*ifelse(esc[2]==1,values[[1]],ifelse(esc[2]==2,values[[2]],values[[3]]))

使用 values 作为标签将 esc 变量转换为因子。然后转换成数字类型。这会将 values 正确映射到 esc

esc <- as.numeric ( as.character( factor( esc, levels = sort( unique( esc )), labels = values) ) )
# [1] 1.0 0.5 0.5 0.0 1.0 0.0 0.0 0.5 0.5 1.0 1.0 1.0 0.0 0.5 0.0 0.5 0.0 0.0 0.5 0.0 0.0 1.0 0.5 1.0 1.0 0.5 1.0 0.5 0.0 0.5 0.5 0.5 0.5 1.0 0.0 0.0 0.0
# [38] 1.0 0.0 0.5 0.0 0.5 0.0 0.5 0.5 0.0 1.0 0.5 0.0 0.0 0.5 0.0 0.5 1.0 1.0 1.0 1.0 0.5 0.5 0.5 0.0 1.0 0.5 1.0 0.5 1.0 0.5 0.0 1.0 0.0 0.5 0.0 0.5 0.5
# [75] 0.5 0.0 0.0 0.5 0.0 0.0 0.5 0.0 0.5 1.0 0.0 1.0 0.0 1.0 1.0 1.0 1.0 1.0 0.5 0.0 0.0 0.0 0.5 0.5 0.0 0.5

table$esc <- esc[ 1: nrow(table) ]   # add esc to table

现在 cost 乘以 esc 得到 final

within( table, final <- cost * esc)
#   id cost esc final
# 1  1  100 1.0   100
# 2  2  200 0.5   100
# 3  3  300 0.5   150
# 4  4  400 0.0     0
# 5  5  500 1.0   500
# 6  6  600 0.0     0

数据:

table <- data.frame(id=c(1,2,3,4,5,6), cost=c(100,200,300,400,500,600))
values <- c(1, 0.5, 0)
set.seed(1L)
esc <- sample(1:3,100,replace=T)
esc
# [1] 1 2 2 3 1 3 3 2 2 1 1 1 3 2 3 2 3 3 2 3 3 1 2 1 1 2 1 2 3 2 2 2 2 1 3 3 3 1 3 2 3 2 3 2 2 3 1 2 3 3 2 3 2 1 1 1 1 2 2 2 3 1 2 1 2 1 2 3 1 3 2 3 2 2 2
# [76] 3 3 2 3 3 2 3 2 1 3 1 3 1 1 1 1 1 2 3 3 3 2 2 3 2