![](/img/trans.png)
[英]R: Create a matrix with randomly generated number of cells with values in each rows and randomly generated values of each of those cells
[英]create an ID column with randomly generated values in R
我正在使用名为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)
}
这会导致错误。 我想得到两种类型的结果(两个函数):
当然有很多更简单的方法可以将随机值分配给ID
列。
似乎 OP 只对带有for
循环的解决方案感兴趣,那么这里有一些例子来实现它
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
}
您可以对数据集中的行数使用sample
。
mtcars$ID <- sample(nrow(mtcars))
其范围是从 1 到数据中的行数,并且会随机分配给每一行。
如果需要,它也可以包装在一个函数中:
get_a_unique_id <- function(data) sample(nrow(data))
mtcars$ID <- get_a_unique_id(mtcars)
iris$ID <- get_a_unique_id(iris)
关于 OP 对for
循环的尝试。 NULL
删除列,而NA
用NA
对其进行初始化。由于mtcars
中没有列,因此会导致错误。 同样for (i in 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)
}
但是,即使这样也不能保证 100% 的每一行都有一个唯一的值,因为使用runif
我们可以有相同的数字。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.