r - 使用二进制条目(0或1)将列表转换为R中的数据表
问题描述
我有一个如下列表:
list("X1", c("X1", "X2"), "X3")
我想将此列表转换为数据表,如下所示:
数据表中的列将根据列表中的所有唯一条目。在此示例中,数据框将包含列 - X1、X2、X3
数据表将有 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 个元素,我正在寻找使用数据表的解决方案。
谢谢,
解决方案
这是获得相同外观结果的基本方法。
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