R列表到稀疏矩阵
R list to sparse matrix
我尝试使用 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()
,但都失败了。而且我不得不手动创建上面的数据框来弄清楚问题。
一个选项是 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") )
我尝试使用 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()
,但都失败了。而且我不得不手动创建上面的数据框来弄清楚问题。
一个选项是 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") )