2017-03-03 45 views
1

假設我有以下幾點。R +的幫助功能模擬和方案

與輸入數據

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]])) 
+0

我想你需要先問這樣一個根本性的問題 – Will

回答

0

轉換esc可變進因子通過使用values作爲標籤。然後轉換爲數字類型。這將正確地將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 

現在乘costesc得到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 
+0

謝謝你之前學[R!更容易我在想什麼。 – Diego