我有一系列的维度,我想制作固定行数的数据集用于测试。
下面是一个简单的例子:
Example dimensions
sex <- c("M", "F")
age <- 18:65
nationality <- c("AU", "AT", "ES", "FR", "MX", "IN")
eye_colour <- c("blue", "brown", "green", "hazel")
我所需要的是一个函数,它接受这些数据并输出一个所有列、没有重复和固定行数的data.frame。
示例输出:
> randomise_data(10, sex, age, nationality, eye_colour)
sex age nationality eye_colour
1 M 37 AT brown
2 F 37 AT brown
3 M 52 AT brown
4 F 52 AT brown
5 M 37 FR brown
6 F 37 FR brown
7 M 52 FR brown
8 F 52 FR brown
9 M 37 AT green
10 F 37 AT green
作为参考,我用来制作上述数据集的代码是:
vars <- list(
sex = c("M", "F"),
age = 18:65,
nationality = c("AU", "AT", "ES", "FR", "MX", "IN"),
eye_colour = c("blue", "brown", "green", "hazel")
)
sample_data <- lapply(vars, sample, 2)
expand.grid(sample_data)[1:10,]
但我不想每次都手动选择一个数字,显然它不会用3代替2。真实的情况中所有因素的组合太大,我无法计算并将其子集为所需的行数。
4条答案
按热度按时间ct2axkht1#
你可以使用
replicate
。如果因子的数量足够大,则获得重复项的机会非常小,否则您可以过采样并删除重复项:你可以使用
expand.grid
来得到所有可能的组合,而sample
是其中的10个:g6ll5ycj2#
使用暴力的通用程序。虽然很丑,但可以实现整个过程的自动化。
omjgkv6w3#
下面是一种使用自定义函数的替代方法,该函数将行数和维度列表作为参数,并生成具有指定行数的随机数据集:
siotufzp4#
找到了一个不会产生巨大网格的答案: