簡體   English   中英

R:如何使用隨機字符串列創建 df

[英]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 中,您應該預先分配空間來存儲循環的結果。 在可能的情況下,指定存儲模式(例如,指定characterinteger何時出現在結果中)將有助於提高函數的效率。

此選項在循環之前創建所需長度的空字符向量,並且循環的每次迭代都將給定 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM