我有以下数据框。
Data_Frame <- structure(list(Factor_1 = c("AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "BB", "BB", "BB", "BB", "BB", "BB", "BB", "BB", "BB", "BB", "BB", "BB", "BB", "BB", "BB", "CC", "CC", "CC", "CC", "CC", "CC", "CC", "CC", "CC", "CC", "CC", "CC", "CC", "CC", "CC", "DD", "DD", "DD", "DD", "DD", "DD", "DD", "DD", "DD", "DD", "DD", "DD", "DD", "DD", "DD"), Factor_2 = c("aa", "aa", "aa", "bb", "bb", "bb", "cc", "cc", "cc", "dd", "dd", "dd", "ee", "ee", "ee", "aa", "aa", "aa", "bb", "bb", "bb", "cc", "cc", "cc", "dd", "dd", "dd", "ee", "ee", "ee", "aa", "aa", "aa", "bb", "bb", "bb", "cc", "cc", "cc", "dd", "dd", "dd", "ee", "ee", "ee", "aa", "aa", "aa", "bb", "bb", "bb", "cc", "cc", "cc", "dd", "dd", "dd", "ee", "ee", "ee"), Factor_3 = c("xxx", "yyy", "zzz", "xxx", "yyy", "zzz", "xxx", "yyy", "zzz", "xxx", "yyy", "zzz", "xxx", "yyy", "zzz", "xxx", "yyy", "zzz", "xxx", "yyy", "zzz", "xxx", "yyy", "zzz", "xxx", "yyy", "zzz", "xxx", "yyy", "zzz", "xxx", "yyy", "zzz", "xxx", "yyy", "zzz", "xxx", "yyy", "zzz", "xxx", "yyy", "zzz", "xxx", "yyy", "zzz", "xxx", "yyy", "zzz", "xxx", "yyy", "zzz", "xxx", "yyy", "zzz", "xxx", "yyy", "zzz", "xxx", "yyy", "zzz")), class = "data.frame", row.names = c(NA, -60L))
我想编写一个递归函数,将该数据框拆分为嵌套列表。输出应类似于以下对象。
Split_Data <- lapply(lapply(split(Data_Frame, Data_Frame[, 1]), function (x) {
split(x, x[, 2])
}), function (x) {
lapply(x, function (y) {
split(y, y[, 3])
})
})
换句话说,应该首先根据第一列的值来拆分数据框,然后根据第二列的值来拆分,依此类推,直到所有列都已用于将数据拆分为越来越小的数据框(每次拆分后列表变得越来越嵌套)。
在这个例子中,数据框中只有三列,但实际上,可能有任意数量的列,所以我希望递归函数能够处理任意数量的列。
base
优先考虑 R 解决方案。
谢谢!
这是一个简单的递归函数,用于按列顺序拆分数据框。请注意,随着列数以及列内不同值的增加,此函数的性能会很差。
包中提供了性能更佳、更灵活的递归拆分函数
collapse
:我不完全确定您是否需要帮助专门编写递归函数,或者是否希望能够动态传递要拆分的列数。
如果是后者,你可以简单地这样做:
在此示例中,我手动定义了三列,但在其他用例中,您也可以动态地自动执行此操作,例如:
或类似的东西。