我正在使用 R 編程語言。
我有以下資料集:
my_data = data.frame(id = c(1,2,3,4,5), n = c(15,3,51,8,75))
我想創建一個新變數,它根據“n”的相應值為每一行生成一個隨機整數。我嘗試使用以下代碼執行此操作:
my_data$rand = sample.int(my_data$n,1)
但這不起作用(相同的亂數重復 5 次)。
我還嘗試為此定義一個函式:
my_function <- function(x){sample.int(x,1)}
transform(my_data, new_column= my_function(my_data$n) )
但這也不起作用(相同的亂數再次重復 5 次)..
最后,我試圖實作這樣的目標:
my_data$rand = c(sample.int(15,1), sample.int(3,1), sample.int(51,1), sample.int(8,1), sample.int(75,1))
有人可以告訴我如何為更大的資料集執行此操作,而無需手動指定每個“sample.int”命令嗎?
謝謝!
uj5u.com熱心網友回復:
當您說“基于價值n”時,您到底是什么意思?依據n如何?
Guess#1:在每一行,您要繪制一個亂數,其可能值為 1 到n。
猜想#2:在每一行,你想為n0 到 1 之間的可能值繪制亂數。
第二個選項更難,但選項 #1 可以通過回圈完成:
my_data = data.frame(id = c(1,2,3,4,5), n = c(15,3,51,8,75))
my_data$rand = NA
set.seed(123)
for(i in 1:nrow(my_data)){
my_data$rand[i] = sample(1:(my_data$n[i]), size = 1)
}
my_data
id n rand
1 1 15 15
2 2 3 3
3 3 51 51
4 4 8 6
5 5 75 67
uj5u.com熱心網友回復:
我們可以使用sapply遍歷 中的所有行,并在每次迭代中my_data生成一個。sample.int
my_data$rand <- sapply(1:nrow(my_data), function(x) sample.int(my_data[x, 2], 1))
id n rand
1 1 15 7
2 2 3 2
3 3 51 28
4 4 8 6
5 5 75 9
uj5u.com熱心網友回復:
您可以通過一次呼叫runif()、乘以n并向上取整來有效地做到這一點:
transform(my_data, rand = ceiling(runif(n) * n))
id n rand
1 1 15 13
2 2 3 1
3 3 51 41
4 4 8 1
5 5 75 9
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/487563.html
上一篇:使用自定義引數創建列函式
