使用循环在R中添加列

时间:2017-06-02 15:16:39

标签: r loops for-loop

我的数据集目前如下所示:

Contract number    FA      NAAR        q    
CM300             9746     47000    0.5010
UL350            80000       0      0.01234
RAD3421          50000     10000    0.9431

我想在0-1之间为每一行添加一个随机生成的数字(称为试验)的列,并将该数字与列q中的值进行比较,如果q<试用,'d'如果q>试验

这是我的代码,它完成了一次这个任务。

trial <- runif(3, min = 0, max = 1)
data2 <- mutate(data, trial)
data2 <- mutate(data, qresult = ifelse(data2$q <= data2$trial, 'l', 'd'))

我的努力是让这个重复进行几次试验,每次重复都会在桌面上添加新的列。我尝试了几种类型的循环,并查看了几个问题,似乎无法弄明白。我是R的新手,所以任何帮助都会受到赞赏!

2 个答案:

答案 0 :(得分:2)

您可能希望使用以下方法来解决此问题:

df <- data.frame(contract = c("CM300", "UL350", "RAD3421"), 
                 FA = c(9746, 80000, 50000), 
                 NAAR = c(47000, 0, 10000), 
                 q = c(0.5010, 0.01234, 0.9431))

trialmax <- 10
for(i in 1:trialmax){ 
  trial <- runif(3, min = 0, max = 1)
  df[ , paste0("trial", i)]   <- trial
  df[ , paste0("qresult", i)] <- ifelse(trial >= df$q, "l", "d")
  }

在这里,我假设您需要10次试验,但您可以将trialmax更改为您想要的任何内容。

答案 1 :(得分:0)

我将事物保存在一个单独的矩阵中以提高效率,但最后只将它们绑定在一起。事实上,使用矢量回收,可以非常有效地完成:

n_trials = 20
trials = matrix(runif(n_trials * nrow(data))], ncol = n_trials)
q_result = matrix(c("l", "d")[(trials > data$q) + 1], ncol = n_trials)
colNames(trials) = paste0("trial", seq_len(n_trials))
colNames(q_result) = paste0("qresult", seq_len(n_trials))
data = cbind(data, trials, q_result)