R:将数据拆分为所有可能的“因子”组合

R: Splitting Data Into All Possible "Factor" Combinations

提问人:stats_noob 提问时间:12/8/2021 最后编辑:Markstats_noob 更新时间:8/19/2023 访问量:171

问:

我正在使用 R 编程语言。假设我有以下数据集:

library(tidyverse)

set.seed(0)

vars <- list(c("A","B"), c("AA","BB", "CC"), c("AA1","BB1"))
probs <- list(c(0.3, 0.7), c(0.2, 0.1, 0.7), c(0.5, 0.5))

setNames(map2_dfc(vars, probs, ~ .x |> sample(1000, replace=TRUE, prob=.y) |> as.factor()), paste0("var_", 1:3)) |> 
  mutate(var_4 = rnorm(1000,10,10),
         var_5 = rnorm(1000,10,10),
         var_6 = rnorm(1000,10,10))

# A tibble: 1,000 × 6
   var_1 var_2 var_3  var_4 var_5 var_6
   <fct> <fct> <fct>  <dbl> <dbl> <dbl>
 1 A     CC    BB1   10.8    4.68  6.24
 2 B     CC    AA1    9.49   6.30  8.86
 3 B     CC    AA1    7.39  21.7  12.9 
 4 B     CC    AA1   25.7    5.35 24.6 
 5 A     BB    BB1    6.28   6.98 19.9 
 6 B     CC    BB1   27.4   23.9  15.6 
 7 A     CC    BB1   -0.989  5.50 19.4 
 8 A     CC    AA1   18.7    1.53 12.6 
 9 B     CC    BB1   15.3    9.67 -2.20
10 B     AA    AA1   -3.94  11.5  16.4 
# ℹ 990 more rows

我的问题:在上述数据中,有 3 个因子变量,这些因子共有 12 种可能的组合。我正在尝试提取这些组合中的每一个,并创建 12 个新数据集,专用于这些组合中的每一个。

我在 R 中尝试了以下代码:

lst1 <- split(my_data, my_data[c("var_1", "var_2", "var_3")], drop = TRUE)

然后,我尝试从此列表中提取这些数据集中的每一个:

list2env(lst1,envir=.GlobalEnv)

有人可以告诉我我所做的是否正确吗?如果有更多的变量和更多的因子组合 - 是否有更有效的方法来解决这个问题?

谢谢!

r 数据操作

评论

1赞 Ritchie Sacramento 12/8/2021
如果你问是否有更好的方法来拆分数据,那么你的方法没有错。除了不建议将单个列表添加到全局环境中,而是将它们保留在列表中。分享您最终想要实现的目标可能会有所帮助。
1赞 rg255 12/8/2021
为什么需要拆分为单独的数据框?可以使用聚合函数(例如data.table)进行任何处理吗?例如library(data.table); dtcars <- data.table(mtcars); dtcars[, mean(mpg), keyby=.(cyl, am)]
1赞 Mikael Jagan 12/8/2021
split是按一个或多个分组变量的级别拆分数据框的标准方法,也是从命名列表到环境的多重分配的标准方法。如果这是您想要实现的,那么您的代码是合理的,前提是您希望每个观察到的组合有 1 个数据帧。可能的 12 种组合中的任何一种都可能偶然未被观察到。在这种情况下,您最终会得到少于 12 个数据帧。list2env

答: 暂无答案