在 R 中将键和值添加到 JSON
Add key and value to JSON in R
我使用 jsonlite
库:json_pca_data <- toJSON(pca_table, pretty = TRUE))
生成 JSON
:
{
"neuron_type" : [
"Ciliated_sensory_neurons",
"Touch_receptor_neurons",
...
...
],
"PC1" : [
4.1158,
-1.1647,
...
...
],
"PC2" : [
-1.4615,
1.9541,
...
...
],
"octr-1" : [
2.5517,
2.8857,
...
...
来自看起来像这样的 pca_table
:
neuron_type PC1 PC2 octr-1
Ciliated_sensory_neurons 4.1157653 -1.4614620 2.551738
Touch_receptor_neurons -1.1647174 1.9540974 2.885656
...
...
但我想在最后的 JSON
中添加 PC1: 0.36
和 PC2: 0.21
。我可以只修改初始 pca_table
:
pca_table$PC1_percent = percent[1]
pca_table$PC2_percent = percent[2]
添加两列然后将其转换为JSON
,但是,我不喜欢
"PC1_percent" : [
0.3676,
0.3676,
0.3676,
0.3676,
0.3676,
0.3676,
0.3676,
0.3676,
0.3676
],
"PC2_percent" : [
0.2331,
0.2331,
0.2331,
0.2331,
0.2331,
0.2331,
0.2331,
0.2331,
0.2331
]
我只想拥有键和值:
"PC1_percent" : 0.3676, "PC2_percent" : 0.2331
Rstudio
有没有办法做到这一点?
我同意你改底层数据副编的逻辑JSON。您的第一个问题是您要用单个值替换列值,而不是附加它。
pca_table$PC1_percent = c(pca_table$PC1_percent, percent[1])
会将 附加 percent
的第一个值到 PC1_percent
列的末尾。不幸的是,这可能会出错(类似于 replacement has 3 rows, data has 2
)或产生其他不良影响。
这有助于了解您是打算向所有列附加一个值,还是只想扩展这两行。对于这两种方法,我的假数据:
tbl <- data.frame(pc1=1:2, pc2=11:12, othr=51)
tbl
# pc1 pc2 othr
# 1 1 11 51
# 2 2 12 51
扩展所有列
创建一个新行,代表原始 data.frame(您需要为所有列添加一些内容):
newrow <- data.frame(pc1=3, pc2=13, othr=NA)
tbl2 <- rbind(tbl, newrow)
tbl2
# pc1 pc2 othr
# 1 1 11 51
# 2 2 12 51
# 3 3 13 NA
jsonlite::toJSON(tbl2, dataframe="columns")
# {"pc1":[1,2,3],"pc2":[11,12,13],"othr":[51,51,"NA"]}
(我从你的问题中推断 "columns"
,即使你没有在你的电话中指定它。为简洁起见,我省略了 pretty=TRUE
。)
仅扩展部分列
通过这条路线,您从 data.frame
变为 list
,因为 data.frame
大致是 list
个向量,其中所有向量都相同长度。
lst <- as.list(tbl)
lst$pc1 <- c(lst$pc1, 98)
lst$pc2 <- c(lst$pc2, 99)
jsonlite::toJSON(lst)
# {"pc1":[1,2,98],"pc2":[11,12,99],"othr":[51,51]}
我使用 jsonlite
库:json_pca_data <- toJSON(pca_table, pretty = TRUE))
生成 JSON
:
{
"neuron_type" : [
"Ciliated_sensory_neurons",
"Touch_receptor_neurons",
...
...
],
"PC1" : [
4.1158,
-1.1647,
...
...
],
"PC2" : [
-1.4615,
1.9541,
...
...
],
"octr-1" : [
2.5517,
2.8857,
...
...
来自看起来像这样的 pca_table
:
neuron_type PC1 PC2 octr-1
Ciliated_sensory_neurons 4.1157653 -1.4614620 2.551738
Touch_receptor_neurons -1.1647174 1.9540974 2.885656
...
...
但我想在最后的 JSON
中添加 PC1: 0.36
和 PC2: 0.21
。我可以只修改初始 pca_table
:
pca_table$PC1_percent = percent[1]
pca_table$PC2_percent = percent[2]
添加两列然后将其转换为JSON
,但是,我不喜欢
"PC1_percent" : [
0.3676,
0.3676,
0.3676,
0.3676,
0.3676,
0.3676,
0.3676,
0.3676,
0.3676
],
"PC2_percent" : [
0.2331,
0.2331,
0.2331,
0.2331,
0.2331,
0.2331,
0.2331,
0.2331,
0.2331
]
我只想拥有键和值:
"PC1_percent" : 0.3676, "PC2_percent" : 0.2331
Rstudio
有没有办法做到这一点?
我同意你改底层数据副编的逻辑JSON。您的第一个问题是您要用单个值替换列值,而不是附加它。
pca_table$PC1_percent = c(pca_table$PC1_percent, percent[1])
会将 附加 percent
的第一个值到 PC1_percent
列的末尾。不幸的是,这可能会出错(类似于 replacement has 3 rows, data has 2
)或产生其他不良影响。
这有助于了解您是打算向所有列附加一个值,还是只想扩展这两行。对于这两种方法,我的假数据:
tbl <- data.frame(pc1=1:2, pc2=11:12, othr=51)
tbl
# pc1 pc2 othr
# 1 1 11 51
# 2 2 12 51
扩展所有列
创建一个新行,代表原始 data.frame(您需要为所有列添加一些内容):
newrow <- data.frame(pc1=3, pc2=13, othr=NA)
tbl2 <- rbind(tbl, newrow)
tbl2
# pc1 pc2 othr
# 1 1 11 51
# 2 2 12 51
# 3 3 13 NA
jsonlite::toJSON(tbl2, dataframe="columns")
# {"pc1":[1,2,3],"pc2":[11,12,13],"othr":[51,51,"NA"]}
(我从你的问题中推断 "columns"
,即使你没有在你的电话中指定它。为简洁起见,我省略了 pretty=TRUE
。)
仅扩展部分列
通过这条路线,您从 data.frame
变为 list
,因为 data.frame
大致是 list
个向量,其中所有向量都相同长度。
lst <- as.list(tbl)
lst$pc1 <- c(lst$pc1, 98)
lst$pc2 <- c(lst$pc2, 99)
jsonlite::toJSON(lst)
# {"pc1":[1,2,98],"pc2":[11,12,99],"othr":[51,51]}