2016-08-13 2 views
0

ランダムな長さのデータフレームを生成したい。理想的には私が他の関数から値を指定し、割り当てたい列名を関数からデータフレーム長(および列データ)を生成する

# This just repeats the same value instead of generating function over and over 
a <- fn1(){} 
rep(a,15) 
[1] "S" "S" "S" "S" "S" "S" "S" ... 

> head(df) 
"id" "age" 
53  12  # randomly chosen data from fn1(){} and fn2(){} 
146  31  # 
343  22  # 
...#randomly generated length from sample(50:5000,1) 

問題は、私がしようとしている道はただ何度も同じ要素を繰り返しているということです。

# Generate length of data frame 
df.length <- sample(50:500,1) 

# Generate data for each row from function 
df.column.id <- fn1(){} 
df.column.age <- fn2(){} 
... 

df <- data.frame("id" = df.column.id, "age" = df.column.age, ...) 

残念ながらrep関数は機能していないので、データフレーム列を関数からどのように生成できますか?私はまた、matrix(data = c(df.column.id, df.column.age), nrow = df.length)は意図したとおりに動作しませんでした。

編集:

レプリケート(10、RandomStatusColor()= "ベクター" を簡略化)が関数出力のベクトルを生成するために取り組んでいます。

+0

cbind(col1 = replicate(10、RandomStatusColor()、simplify = "vector")、col2 = ....は私の後だったものです – jrzelling

答えて

1

たぶん、このようなものは助けることができる:

min_rownum <- 10 
max_rownum <- 50 
num_of_rows <- sample(seq(min_rownum, max_rownum), 1) 
min_age <- 1 
max_age <- 50 
age <- sample(seq(min_age, max_age), num_of_rows, replace = TRUE) 
min_ID <- 50 
max_ID <- 500 
id <- sample(seq(min_ID, max_ID), num_of_rows) 
df1 <- data.frame(id, age) 

を私はコード自明になるだろう変数名を使用しようとしました。

sample()のパラメータreplace = TRUEは、要素を複数回選択できることを意味します。年齢の場合、これはもっともらしいですが、IDは一意でなければなりません。 sample()の2番目の引数は、最初の引数として渡されるベクトルからいくつの要素を選択すべきかを定義します。


質問のタイトルは、data.frameが関数によって生成されるべきであることを示唆しています。その場合、上記のコードは、このような機能にラップすることができる。この機能を使用

make_random_df <- function(min_rownum=10, max_rownum=50, min_age=1, max_age=50, 
         min_ID=50, max_ID=500) { 
    num_of_rows <- sample(seq(min_rownum, max_rownum), 1) 
    age <- sample(seq(min_age, max_age), num_of_rows, replace = TRUE) 
    id <- sample(seq(min_ID, max_ID), num_of_rows) 
    df1 <- data.frame(id, age) 
} 

、data.frameは、ここでのデータサンプルを生成する関数だ

my_random_df <- make_random_df() 
#> head(my_random_df) 
# id age 
#1 461 7 
#2 86 44 
#3 319 8 
#4 363 45 
#5 59 3 
#6 258 49 
1

で作成することができます与えられたベクトル(vec)から長さ(len)与えられた:

createData <- function(vec, len) { 
    sample(vec, len, replace = TRUE) 
} 

nobs <- 20 

df <- data.frame(id = createData(vec = c("a", "b", "c"), len = nobs), 
       age = createData(vec = seq(10, 50, 10), len = nobs)) 

df 

はあなたが後にしている何本か?

+0

'createData'は' fn() 'の戻り値この例では 'c'や' seq'のようなベクトルです。 'fn()'のどれかを表示できますか? – TimSalabim

関連する問題