我尝试使用R从mongodb加载数据,但我发现查询结果是非结构化数据,这是一个混乱的列表,结果如下所示:
df
[[1]]
list()
[[2]]
[[2]][[1]]
[1] "vector1"
[[2]][[2]]
[1] "vector2"
[[3]]
list()
[[4]]
list()
[[5]]
list()
[[6]]
[[6]][[1]]
[1] "vector1"
[[6]][[2]]
[1] "vector2"
[[6]][[3]]
[1] "vector3"
我尝试将列表转换为矩阵,就像这样:
vector1 vector2 vector3
0 0 0
1 1 0
0 0 0
0 0 0
0 0 0
1 1 1
我尝试使用SparseMatrix()
和sapply()
,但都失败了。我不得不手动创建上面的数据框,以使问题清晰。
答案 0 :(得分:3)
一个选项是来自mtabulate
qdapTools
library(qdapTools)
mtabulate(df)
# vector1 vector2 vector3
#1 0 0 0
#2 1 1 0
#3 0 0 0
#4 0 0 0
#5 0 0 0
#6 1 1 1
如果我们需要base R
选项,我们可以遍历list
元素,将其转换为factor
,levels
指定为unique
元素在list
中,使用table
获取频率,并转置(t
)输出。
Un1 <- unique(unlist(df))
t(sapply(df, function(x) table(
if(length(x)==0)
factor(x,levels = Un1)
else factor(unlist(x), levels=Un1))))
# vector1 vector2 vector3
#[1,] 0 0 0
#[2,] 1 1 0
#[3,] 0 0 0
#[4,] 0 0 0
#[5,] 0 0 0
#[6,] 1 1 1
df <- list(list(), list("vector1", "vector2"), list(),
list(), list(), list("vector1", "vector2", "vector3") )