重命名 R 中的嵌套列名称

Rename nested column names in R

提问人:Ryan Garnett 提问时间:8/14/2023 更新时间:8/14/2023 访问量:28

问:

我希望根据定义的模式创建一个 json 文件:

col1,
col2,
fields{name, value}

我有一个包含四列(col1 到 col4)的数据框,我想将 col3 和 col4 嵌套到“字段”中,并将列和 col3 和 col4 的值嵌套。

我尝试了以下方法,但无法实现我正在寻找的嵌套:

df <- data.frame(
  col1 = c(seq(1, 5)),
  col2 = c(seq(6, 10)),
  col3 = c("a", "b", "c", "d", "e"),
  col4 = c(seq(100, 104))
) |>
  nest(fields = c(col3, col4))

# format to json
cat(rjson::toJSON(unname(split(df, 1:nrow(df)))))

我将如何映射和重命名,以便将 col3 和 col4 嵌套到“字段”中,其中第一条记录的名称等于且值等于,第二条记录的名称等于且值等于,这将返回如下内容:name(col3)col3name(col4)col4

{
  "col1":1,
  "col2":6,
  "fields":[
    {
      "name":"col3",
      "value":"a"
    },
    {
      "name":"col4",
      "value":"q"
    }
  ]
}
r json 嵌套

评论


答:

2赞 r2evans 8/14/2023 #1

我们可以在每个嵌套框架上使用。(我在这里只是为了减少演示而切片。pivot_longer1:2

df %>%
  slice(1:2) %>%
  mutate(
    fields = lapply(fields, function(onefield) {
      mutate(onefield, across(everything(), as.character)) %>%
        pivot_longer(everything())
    })
  ) %>%
  jsonlite::toJSON(pretty = TRUE)
# [
#   {
#     "col1": 1,
#     "col2": 6,
#     "fields": [
#       {
#         "name": "col3",
#         "value": "a"
#       },
#       {
#         "name": "col4",
#         "value": "100"
#       }
#     ]
#   },
#   {
#     "col1": 2,
#     "col2": 7,
#     "fields": [
#       {
#         "name": "col3",
#         "value": "b"
#       },
#       {
#         "name": "col4",
#         "value": "101"
#       }
#     ]
#   }
# ] 

如果您愿意,您可以轻松使用而不是使用它,它不会改变任何内容。purrr::maplapply

请注意,这必须转换为 (etc),因为重塑要求所有值共享同一类。这意味着您的一些条目是(例如)。104"104""value": "104"

评论

1赞 Ryan Garnett 8/14/2023
这正是我想要的,非常感谢您的帮助!