使用R中随机生成的值创建ID列

使用R中随机生成的值创建ID列,r,function,R,Function,我正在使用一个名为mtcars的软件包,我想为每次观察得到一个随机生成的数字。我写了一个小函数 mtcars$ID <- NULL for (i in mtcars){ mtcars$ID <- runif(1, min=0, max=100) } 然而,这对所有汽车来说都是相同的数字 我试过了 mtcars$ID <- NULL for (i in mtcars){ mtcars$ID[i] <- runif(1, min=0, max=100) } 这会导

我正在使用一个名为mtcars的软件包,我想为每次观察得到一个随机生成的数字。我写了一个小函数

mtcars$ID <- NULL
for (i in mtcars){
  mtcars$ID <- runif(1, min=0, max=100)
}
然而,这对所有汽车来说都是相同的数字

我试过了

mtcars$ID <- NULL
for (i in mtcars){
  mtcars$ID[i] <- runif(1, min=0, max=100)
}
这会导致一个错误。我想得到两种类型的结果两个函数:

为每个观测值指定一个随机数 为每个观测值分配一个唯一的随机数 您可以对数据集中的行数使用sample

mtcars$ID <- sample(nrow(mtcars))
因此,它应该是

mtcars$ID <- NA 
for (i in seq_len(nrow(mtcars))){
   mtcars$ID[i] <- runif(1, min=0, max=100)
}

然而,即使这样也不能保证每行都有一个唯一的值,因为使用runif我们可以有相同的数字

当然,有很多更简单的方法可以将随机值分配给ID列

OP似乎只对for循环的解决方案感兴趣,下面是一些例子

要为每个观察值指定一个随机数,请执行以下操作: 为每个观测值指定一个唯一的随机数
是的,谢谢。但我仍然想知道如何编写函数,使每一行都有不同的数字?@Danka如果你尝试上述方法,每一行都会有不同的数字。是的,结果是一样的,你得到它的方式更好,但我想学习如何编写函数我不清楚你在寻找什么,但你可以将相同的东西包装成一个函数,并用于不同的数据集。我已经更新了答案。我想知道为什么使用mtcars$ID[I]会出现错误,以及如何更改我的函数,以便为eevery rowThank@ThomasIsCoding获得不同的号码。为什么我需要直接使用seqnrowmtcars而不是mtcars?@Danka如果在mtcars中使用for i…,我指的是mtcars中的元素,即mtcars的列,它们是列表,而不是行号。
 for (i in mtcars){
    print(i)
 }
mtcars$ID <- NA 
for (i in seq_len(nrow(mtcars))){
   mtcars$ID[i] <- runif(1, min=0, max=100)
}
for (i in seq(nrow(mtcars))){
  mtcars$ID[i] <- runif(1, min=0, max=100) # assign random value which might be duplicated (but with low probability if you don't have super many rows) 
}

for (i in seq(nrow(mtcars))){
  repeat {
    r <- runif(1, min=0, max=100)
    if (!r %in% mtcars$ID) break # if generated random number is not in the existing values, then terminate the loop and go to value assignment in the next step
  }
  mtcars$ID[i] <- r
}