[英]R: How to create a df with columns of random strings
我有一個 df,我希望其中一個列包含 1 到 100 之間的 5 個隨機值的字符串:
expected_df <- data.frame("x" = stri_rand_strings(4, 8), "y" = round(runif(4, 13, 272)), z =(c('2 3 50 17 9', '10 3 5 100 22', '86 30 74 10 27', '6 33 4 19 66')))
我試圖創建一個重復“1-100”5次的function,但是它為df中的每一行重復相同的5個數字
rand_str<- function() {
x = c(sample(1:100, 5, replace = FALSE))
return(paste0(x,collapse = " "))
}
df <- data.frame("x" = stri_rand_strings(4, 8), "y" = round(runif(4, 13, 272)), z =rep(rand_str(),4))
我嘗試添加 rep(rand_str(),4),但它並沒有解決問題。
如何創建 4 行,每行有 5 個不同的數字?
提前致謝!
您正在尋找的 function 是replicate
。 使用replicate
,您可以像這樣使用原始的rand_str()
function :
replicate(4, rand_str())
或者,您可以像這樣重寫您的rand_str()
function:
rand_str <- function(n) replicate(n, paste(sample(100, 5, FALSE), collapse=" "))
演示:
set.seed(1) # So you can replicate these results
rand_str(4)
# [1] "27 37 57 89 20" "90 94 65 62 6" "21 18 68 38 74" "50 72 98 37 75"
作為參考,如果您要使用for
循環,則以下任何一種方法都會比 Steffen 的答案更有效,Steffen 的答案會隨着循環的每次迭代而增長一個向量。 在 R 中,您應該預先分配空間來存儲循環的結果。 在可能的情況下,指定存儲模式(例如,指定character
或integer
何時出現在結果中)將有助於提高函數的效率。
此選項在循環之前創建所需長度的空字符向量,並且循環的每次迭代都將給定 position 處的空向量替換為示例的粘貼結果。
rand_str <- function(n) {
returnvalue <- character(n)
for (i in 1:n) {
returnvalue[i] <- paste0(sample(1:100, 5, replace = FALSE), collapse = " ")
}
returnvalue
}
此選項創建一個空矩陣,其中每一行存儲樣本的結果。 一旦矩陣被填充,它就會使用do.call(paste, ...)
paste
語將 d 粘貼在一起,通常用於將data.frame
的行粘貼在一起。
rand_str <- function(n) {
m <- matrix(NA_integer_, ncol = 5, nrow = n)
for (i in seq.int(n)) {
m[i, ] <- sample(100, 5, FALSE)
}
do.call(paste, data.frame(m))
}
這個怎么樣?
rand_str <- function(n) {
returnvalue <- c()
for (i in 1:n) {
x = c(sample(1:100, 5, replace = FALSE))
returnvalue <- c(returnvalue, paste0(x, collapse = " "))
}
returnvalue
}
df <- data.frame("x" = stri_rand_strings(4, 8), "y" = round(runif(4, 13, 272)), z =rand_str(4))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.