这个问题可能很明显,或者已经问过,但是我找不到解决方案:
This question might be obvious or asked already, but I can't find a solution:
我想创建一个包含所有可能组合(和数字)的数据框变量),使其看起来像下面的示例:
I want to create a data frame with all possible combinations (and number of variables) such that it looks like the following example:
dataframe <- data.frame(variable = 1:4, a = c("gender", NA, NA, NA), b = c("age", NA, NA, NA), c = c("city", NA, NA, NA), d = c("education", NA, NA, NA), e = c("gender", "age", NA, NA), f = c("gender", "city", NA, NA), g = c("gender", "education", NA, NA), h = c("age", "city", NA, NA), i = c("age", "education", NA, NA), j = c("city", "education", NA, NA), k = c("gender", "age", "city", NA), l = c("gender", "age", "education", NA), m = c("gender", "city", "education", NA), n = c("gender", "age", "city", "education"))我的变量太多,因此,不值得写出来,我想避免错误。谢谢您的帮助!
I have too many variables, so it's not worth writing it out, and I want to avoid errors. Thank you for helping!
推荐答案以下是 combn 的选项。获取变量名称的 vector ,遍历 vector 的序列,应用 combn将向量上的与 m 指定为循环的序列,转换为 data.frame 和 cbind 所有 list 元素在一起。 rowr 中的 cbind.fill 适用于 fill 与 NA 用于 list 元素的行数少于最大行 data.frame
Here is an option with combn. Get the vector of variable names, loop through the sequence of the vector, apply the combn on the vector with m specified as the sequence from the loop, convert to data.frame and cbind all the list elements together. The cbind.fill from rowr is suitable to fill with NA for list elements that have less number of rows than the maximum row data.frame
library(rowr) res <- do.call(cbind.fill, c(fill = NA, lapply(seq_along(v1), function(i) { m1 <- combn(v1, i) if(is.vector(m1)) as.data.frame.list(m1) else as.data.frame(m1)}))) colnames(res) <- letters[seq_along(res)]或按照@Moody_Mudskipper的建议,
Or as @Moody_Mudskipper suggested,
res1 <- do.call(cbind.fill, c(fill = NA, lapply(seq_along(v1), function(i) combn(v1, i)))) colnames(res1) <- letters[seq_len(ncol(res1))]数据
data
v1 <- c('gender', 'age', 'city', 'education')更多推荐
r:创建具有所有可能选项和变量组合数量的数据框
发布评论