使用R中随机生成的值创建ID列
我正在使用一个名为mtcars的软件包,我想为每次观察得到一个随机生成的数字。我写了一个小函数使用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$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
}