分享
三行代码  ›  专栏  ›  技术社区  ›  elborrador

基于所有因子水平组合的数据帧的r行子集 - R - row subsets of data frame based on all combinations of factor levels

  •  1
  • elborrador  · 技术社区  · 1 周前

    我想找出最简单的方法来做以下的事情。我有一个数据框 df 具有 colnames(df) <- c("A", "B", "C", "D", "E") 其中所有变量都被编码为因子。给定一些变量的任意子集,我想生成 数据框 它可以基于这些变量的所有可能的因子水平组合生成。

    所以基本上,我在找一个函数 allSubsets 以列名向量作为参数(假设 c("A", "E") 并返回数据帧列表。比如说 levels(df$A) a1, a2 levels(df$E) e1, e2, e3 ,然后我希望函数生成一个数据帧列表(元素对应的长度:

    df[df$A == 'a1' & df$E == 'e1',]

    df[df$A == 'a2' & df$E == 'e1',]

    df[df$A == 'a1' & df$E == 'e2',]

    df[df$A == 'a2' & df$E == 'e2',]

    df[df$A == 'a1' & df$E == 'e3',]

    df[df$A == 'a2' & df$E == 'e3',]

    我知道 expand.grid 但我不确定这是否是最好的方法。

    1 回复  |  直到 1 周前
        1
  •  0
  •   akrun    1 周前

    我们可以利用 split 得到一个 list 属于 data.frame S公司

    lst1 <- split(df, df[c("A", "E")], drop = TRUE)