r - 从 R 中的条目行创建一个稀疏矩阵
问题描述
我在 R 中有一个如下形式的数据框:
lemma mi doc
1 butroe_polihalino 5.385031 ANEJO_05_Q ECOL_Cantabrico Oriental
2 tramo_oligohalino 5.385031 ANEJO_05_Q ECOL_Cantabrico Oriental
3 programas_de_seguimiento 5.385031 ANEJO_05_Q ECOL_Cantabrico Oriental
4 ifim 5.385031 ANEJO_05_Q ECOL_Cantabrico Oriental
5 rdl 5.385031 ANEJO_05_Q ECOL_Cantabrico Oriental
6 prointec 5.385031 ANEJO_05_Q ECOL_Cantabrico Oriental
我想创建一个稀疏矩阵(我将在其中运行 PCA),其形式为:
butroe_polihalino tramo_oligohalino ...
ANEJO_05_... 5.385031 5.385031
docs2 (no value) 4.321345
...
其中基本上包含文档作为行,引理作为列,mi 是值。也可能没有定义的值。
有没有办法从数据中定义一个像 R 一样的稀疏矩阵?
解决方案
您可以sparseMatrix
从基础matrix
包中使用。(假设您的 data.frame 中没有因子。)
m <- Matrix::sparseMatrix(i = match(df$doc, unique(df$doc)),
j = match(df$lemma, unique(df$lemma)),
x = df$mi,
dimnames = list(unique(df$doc), unique(df$lemma)))
或caste_sparse
从tidytext
. 这减少了输入,并且该功能会检查您的数据是否有因素。
m <- tidytext::cast_sparse(df, row = doc, column = lemma, value = mi)
数据:
df <- structure(list(lemma = c("butroe_polihalino", "tramo_oligohalino", "programas_de_seguimiento",
"ifim", "rdl", "prointec"),
mi = c(5.385031,5.385031, 5.385031, 5.385031, 5.385031, 5.385031),
doc = c("ANEJO_05_Q ECOL_Cantabrico Oriental","ANEJO_05_Q ECOL_Cantabrico Oriental",
"ANEJO_05_Q ECOL_Cantabrico Oriental", "ANEJO_05_Q ECOL_Cantabrico Oriental",
"ANEJO_05_Q ECOL_Cantabrico Oriental", "ANEJO_05_Q ECOL_Cantabrico Oriental")),
.Names = c("lemma", "mi", "doc"),
class = "data.frame",
row.names = c(NA, -6L))
推荐阅读
- python - Python函数为列表中的每个区域创建一个图
- php - 分页不显示数据库中的最后两条数据
- python - Kivy,使用函数并获取随机信息到文本输入和随机图像?
- vuejs2 - VueJS 在操作之前处理完整的模板
- reactjs - 可以在没有后端的情况下从 SendGrid 和 React.js 发送电子邮件吗?
- java - KieScanner 无法从自定义 Maven 存储库中获取最新的罐子 - Maven - 3.6.3
- gradle - 如果某些类的测试发现失败,如何使 Junit 平台测试失败?
- ios - Crashlytics 不在 iOS 上发送事件
- crystal-reports - 如何使用 Crystal Reports 中的公式调整交叉表顺序
- mysql - Laravel MySQL groupby created_at 日期格式没有时间