首页 > 解决方案 > 使用二进制条目(0或1)将列表转换为R中的数据表

问题描述

我有一个如下列表:

list("X1", c("X1", "X2"), "X3")

我想将此列表转换为数据表,如下所示:

  1. 数据表中的列将根据列表中的所有唯一条目。在此示例中,数据框将包含列 - X1、X2、X3

  2. 数据表将有 3 行,相当于列表的长度

  3. 在数据表中填充值 a) 数据表将具有二进制值 (0/1) b) 例如,第 1 行的 X1 列为 1,而其他列 (X2 和 X3) 为 0 c) 第 2 行将具有列 X1 和 X2 为 1,而 X3 为 0,依此类推。

最终输出将如下所示:

structure(list(X1 = c(1, 1, 0), X2 = c(0, 1, 0), X3 = c(0, 0, 
1)), class = "data.frame", row.names = c(NA, -3L))

由于我的列表包含超过 80,000 个元素,我正在寻找使用数据表的解决方案。

谢谢,

标签: rlist

解决方案


这是获得相同外观结果的基本方法。

l = list("X1", c("X1", "X2"), "X3")
names(l) = seq_along(l)
t(table(stack(l)))
#>    values
#> ind X1 X2 X3
#>   1  1  0  0
#>   2  1  1  0
#>   3  0  0  1

要根据您的预期输出实际将其放入 data.frame 中,我们可以apply覆盖我们的结果表对象以最终将其放入 data.frame 中。请注意,这比预期的要多。

tbl = t(table(stack(l)))
res = as.data.frame(apply(tbl, 2L, list))
names(res) = colnames(tbl)

res
#>   X1 X2 X3
#> 1  1  0  0
#> 2  1  1  0
#> 3  0  0  1

推荐阅读