将R中的矩阵/数据帧转换为带有一些约束的JSON对象
重述: 我必须将R中的矩阵转换为JSON对象,其中包含一些结构。我正在使用rjson软件包。通过一个例子,让我来说明我想要什么。我的具体案例是R中推荐系统代码的输出,其中X2 X3是与特定项目X1最接近的两个项目。此外,X4,X5是与该行的(X1,X2)和(X1,X3)相关联的相似性分数。我希望每个项目的所有推荐项目都是JSON对象,每个项目及其推荐的JSON对象-项目都是更大的JSON对象。分数也应该合并到JSON结构中 让我通过一个例子来解释 假设我有一个矩阵将R中的矩阵/数据帧转换为带有一些约束的JSON对象,json,r,matrix,rjson,rjsonio,Json,R,Matrix,Rjson,Rjsonio,重述: 我必须将R中的矩阵转换为JSON对象,其中包含一些结构。我正在使用rjson软件包。通过一个例子,让我来说明我想要什么。我的具体案例是R中推荐系统代码的输出,其中X2 X3是与特定项目X1最接近的两个项目。此外,X4,X5是与该行的(X1,X2)和(X1,X3)相关联的相似性分数。我希望每个项目的所有推荐项目都是JSON对象,每个项目及其推荐的JSON对象-项目都是更大的JSON对象。分数也应该合并到JSON结构中 让我通过一个例子来解释 假设我有一个矩阵 X1 X2 X3 X4 X5
X1 X2 X3 X4 X5
1 22 23 0.8 0.5
34 4 87 0.4 0.4
23 7 92 0.6 0.5
我希望每个项目都有一个JSON结构(每行每个X1),以及推荐的项目和每个组合的相似性分数,作为一个单独的JSON实体,并按顺序完成。我不希望整个JSON对象包含这些单独的JSON对象。
假设还有一个名为“coid”的实体将作为代码的输入。我假设它是XYZ,所有行都是一样的
{ "_id" : { "coid" : "XYZ", "iid" : "1"}, "items" : [ { "item" : "22", "score" : 0.8},{ "item": "23", "score" : 0.5}] }
{ "_id" : { "coid" : "XYZ", "iid" : "34"},"items" : [ { "item" : "4", "score" : 0.4},{ "item": "87", "score" : 0.4}] }
{ "_id" : { "coid" : "XYZ", "iid" : "23"},"items" : [ { "item" : "7", "score" : 0.6},{ "item": "92", "score" : 0.5}] }
如上所述,每个实体都是一个有效的JSON结构/对象,但它们并不是作为一个整体放在一个单独的JSON对象中
我非常感谢对前面问题所做的所有帮助,但不知何故,我觉得我这里的新修改与它们无关,因为最后,如果你做一个toJSON(某个实体),那么它会将整个东西转换成一个JSON对象。我不想那样。
我希望像这样的单个文件被写入一个文件
对于我的无知和不便,我深表歉意。请帮忙。
谢谢。所需的json对象不是有效的。在将data.frame转换为json对象之前,应该先将其转换为列表。例如,您可以执行以下操作:
cat(toJSON(apply(dat,1,function(x)list(item =unname(x[1]),
Recos=unname(x[-1])))))
[
{
"item": 1,
"Recos": [ 22, 23 ]
},
{
"item": 34,
"Recos": [ 4, 87 ]
},
{
"item": 23,
"Recos": [ 7, 92 ]
}
]
首先,您的json是无效的。例如,您可以检查有效性 也就是说,要获得类似于所需json输出的东西,您可以按f
library(RJSONIO)
# recreating your matrix
m <- matrix(c(1,22,23,34,4,87,23,7,92),nrow=3,byrow=T)
colnames(m)<-c('X1','X2','X3')
# convert numeric matrix to character (if necessary)
m <- matrix(as.character(m),nrow=nrow(m))
# transform your matrix before turning into json
p <- apply(m,MARGIN=1,FUN=function(r)list(Item=unname(r[1]),Recos=unname(r[-1])))
# jsonize
toJSON(p)
编辑(根据您的编辑):
library(RJSONIO)
# recreating your matrix
m <- matrix(c(1,22,23,34,4,87,23,7,92),nrow=3,byrow=T)
colnames(m)<-c('X1','X2','X3')
# transform your matrix before turning into json
p <- apply(m,MARGIN=1,
FUN=function(r){
list(itemID=unname(r[1]),
recommendedItems=lapply(unname(r[-1]),
FUN=function(i)list(itemID=i)))
})
# jsonize
toJSON(p)
编辑2:
library(RJSONIO)
# recreating your matrix
m <- matrix(c(1,22,23,34,4,87,23,7,92),nrow=3,byrow=T)
colnames(m)<-c('X1','X2','X3')
# transform your matrix before turning into json
p <- apply(m,MARGIN=1,
FUN=function(r){
list(itemID=unname(r[1]),
recommendedItems=lapply(unname(r[-1]),
FUN=function(i)list(itemID=i)))
})
# jsonize
toJSON(p)
与其为您编写代码,我更愿意解释RJSONIO包如何将R结构转换为json
1)元素的未命名列表(或向量)(例如
v您需要创建适当的嵌套列表
m <- matrix(c(1,22,23,34,4,87,23,7,92),nrow=3,byrow=T)
colnames(m)<-c('X1','X2','X3')
m1 <- apply(m,1, function(x) {
list(itemID = unname(x[1]),
recommendedItems = lapply(unname(x[2:3]), function(y) {
list(itemID = y)}
))
})
cat(toJSON(m1))
[
{
"itemID": 1,
"recommendedItems": [
{
"itemID": 22
},
{
"itemID": 23
}
]
},
{
"itemID": 34,
"recommendedItems": [
{
"itemID": 4
},
{
"itemID": 87
}
]
},
{
"itemID": 23,
"recommendedItems": [
{
"itemID": 7
},
{
"itemID": 92
}
]
}
]
m问题已被编辑。请帮助我如何制作我所要求的新JSON结构。@user2878729:检查我的编辑。顺便说一句,试着了解JSON是如何从R结构开始生成的。这非常简单;)我们能为每一行独立地生成单独的JSON对象吗?例如:我再次编辑了我的问题。对此我非常抱歉。请仔细阅读并帮助我。@user2878729:Stackoverflow不是一个你可以要求用户为你编写代码的地方,而是一个你可以学习如何解决自己问题的地方。根据这个想法,我发布了一篇关于RJSONIO如何工作的描述。我相信在阅读了我的解释之后,你将能够完成你的任务;)该问题已被编辑。请帮助我如何制作我所要求的新JSON结构。谢谢
[ element_1, element_2, element_3, ... ]
{ "name_1": value_1, "name_2": value_2, ... }
toJSON(list(list(A=2),1:3))
> '[ { "A": 2 }, [ 1, 2, 3 ] ]'
toJSON(list(A=list(1),B=list(C="X"),D=1))
> '{ "A": [ 1 ], "B": { "C": "X" }, "D": 1 }'
m <- matrix(c(1,22,23,34,4,87,23,7,92),nrow=3,byrow=T)
colnames(m)<-c('X1','X2','X3')
m1 <- apply(m,1, function(x) {
list(itemID = unname(x[1]),
recommendedItems = lapply(unname(x[2:3]), function(y) {
list(itemID = y)}
))
})
cat(toJSON(m1))
[
{
"itemID": 1,
"recommendedItems": [
{
"itemID": 22
},
{
"itemID": 23
}
]
},
{
"itemID": 34,
"recommendedItems": [
{
"itemID": 4
},
{
"itemID": 87
}
]
},
{
"itemID": 23,
"recommendedItems": [
{
"itemID": 7
},
{
"itemID": 92
}
]
}
]