【发布时间】:2019-11-28 14:24:52
【问题描述】:
我有以下数据框:
dat <- data.frame(toys = c("yoyo", "doll", "duckie", "tractor", "airplaine", "ball", "racecar", "dog", "jumprope", "car", "elephant", "bear", "xylophone", "tank", "checkers", "boat", "train", "jacks", "truck", "whistle", "pinwheel"),
price = c(1.22, 2.75, 1.85, 5.97, 6.47, 2.16, 7.13, 4.57, 1.46, 5.18, 3.16, 4.89, 7.11, 6.45, 4.77, 8.04, 6.71, 2.31, 6.21, 0.98, 0.87))
我现在想获得 7 到 14 个选定玩具的所有玩具组合。在此线程 (Unordered combinations in R) 之后,我正在使用 arrangements 包中的 combinations 函数:
library(arrangements)
combs <- lapply(7:14, combinations, x = dat$toys)
用str(combs)查看结果,它给出了一个长度为8的列表,其中每个列表元素都是一个二维因子,例如
test <- combs[[1]]
dim(test)
但是,如果我现在想将列表元素转换为数据框,它只会给我一个包含一列的数据框,而我希望 as.data.frame(combs[[1]]) 有 7 列。
如果我在上面的组合函数中使用整数或字符向量,一切都会按预期工作,例如与:
combs2 <- lapply(7:14, combinations, x = as.character(dat$toys)) # or
combs3 <- lapply(7:14, combinations, x = 1:21)
test2 <- as.data.frame(combs2[[1]])
test3 <- as.data.frame(combs3[[1]])
我得到了一个包含几列的正确数据框。
为什么我的代码可以处理整数和字符,但不能处理因子?
【问题讨论】:
-
如何将列表元素转换为数据框?字符或整数向量如何按预期工作?
-
我调整了上面的帖子。希望它现在更清楚。
-
我尝试了上面的代码,但我无法复制结果。
as.data.frame(combs[[1]])返回一个七列数据框。 -
澄清一下,这是针对因子情况,而不是字符串/整数情况。
-
你确定吗?我只是重试并再次获得一个包含 813960 行的因子案例的单列数据框。 (我刚刚编辑了我的帖子以使示例不那么模棱两可,即我将对象名称更改为 combs/combs2/combs3。