我有CSV文件,看起来像你下面看到的.我希望将其转换为JSON格式,但以基于ew_id列的分层方式进行转换,这样对于每个唯一的ew_id,我将拥有一个新的对象数组(请参见下面的示例).我还想在JSON格式的变量中将fil1fil5分组为fillers.

sub_num cons_r sus_r sus fil1 fil2 fil3 fil4 fil5 perp ew_id
147 W 1 57 77 60 67 32 76 89 1
55 B 2 177 111 148 145 113 141 193 1
NA R 1 53 7 11 25 50 81 87 2
NA R 2 150 124 120 157 178 164 188 2

因此,理想情况下,JSON应该如下所示:

let exp_info = [

 [{"ew_id": 1,
  "sub_num": 147,
  "cons_r": "W",
  "sus_r": 1,
  "sus": 57,
  "fillers": [77,60,67,32,76],
  "perp":89},

  {"ew_id":1,
   "sub_num":55,
   "cons_r": "B",
   "sus_r": 2,
   "sus": 177,
   "fillers": [111,148,145,113,141],
   "perp":193
   }],

[{"ew_id": 2,
  "sub_num": NA,
  "cons_r": "R",
  "sus_r": 1,
  "sus": 53,
  "fillers": [7,11,25,50,81],
  "perp":87},

  {"ew_id":2,
   "sub_num":NA,
   "cons_r": "R",
   "sus_r": 2,
   "sus": 150,
   "fillers": [124,120,157,178,164],
   "perp":188
   }]
];

如果您能给我一些建议,我将不胜感激.

推荐答案

library(dplyr)
tmp <- quux |>
  rowwise() |>
  mutate(fillers = list(c_across(matches("^fil[0-9]")))) |>
  ungroup() |>
  select(-matches("^fil[0-9]"))
split(tmp, tmp$ew_id) |>
  unname() |>
  jsonlite::toJSON(pretty = TRUE)
# [
#   [
#     {
#       "sub_num": 147,
#       "cons_r": "W",
#       "sus_r": 1,
#       "sus": 57,
#       "perp": 89,
#       "ew_id": 1,
#       "fillers": [77, 60, 67, 32, 76]
#     },
#     {
#       "sub_num": 55,
#       "cons_r": "B",
#       "sus_r": 2,
#       "sus": 177,
#       "perp": 193,
#       "ew_id": 1,
#       "fillers": [111, 148, 145, 113, 141]
#     }
#   ],
#   [
#     {
#       "cons_r": "R",
#       "sus_r": 1,
#       "sus": 53,
#       "perp": 87,
#       "ew_id": 2,
#       "fillers": [7, 11, 25, 50, 81]
#     },
#     {
#       "cons_r": "R",
#       "sus_r": 2,
#       "sus": 150,
#       "perp": 188,
#       "ew_id": 2,
#       "fillers": [124, 120, 157, 178, 164]
#     }
#   ]
# ] 

数据

quux <- structure(list(sub_num = c(147L, 55L, NA, NA), cons_r = c("W", "B", "R", "R"), sus_r = c(1L, 2L, 1L, 2L), sus = c(57L, 177L, 53L, 150L), fil1 = c(77L, 111L, 7L, 124L), fil2 = c(60L, 148L, 11L, 120L), fil3 = c(67L, 145L, 25L, 157L), fil4 = c(32L, 113L, 50L, 178L), fil5 = c(76L, 141L, 81L, 164L), perp = c(89L, 193L, 87L, 188L), ew_id = c(1L, 1L, 2L, 2L)), class = "data.frame", row.names = c(NA, -4L))

R相关问答推荐

根据列表中项目的名称多次合并数据框和列表

使用对管道内单元格的引用生成新变量

如何使用shinyChatR包配置聊天机器人

计算R中的威布尔分布的EDF

R Highcharts与两个位置关联的注释

隐藏e_mark_line的工具提示

根据模式将一列拆分为多列,并在R中进行拆分

derrr summarise每个组返回多行?

为什么在ggplot2中添加geom_text这么慢?

在R中使用数据集名称

如何使用列表中多个列表中的第一条记录创建数据框

在R中使用Scale_y_Break后更改y轴标签

以更少间隔的较小表中的聚合离散频率表

以相同的方式对每个表进行排序

层次树图的数据树

无法将条件case_when()应用于使用!!创建的新变量Mutations

判断函数未加载R中的库

通过R:文件名未正确写入[已解决]将.nc文件转换和导出为.tif文件

修复标签重叠和ggploy内的空间

R data.设置函数&;连接中的列值而不使用for循环的表方法?