提问人:Ryan Garnett 提问时间:8/14/2023 更新时间:8/14/2023 访问量:28
重命名 R 中的嵌套列名称
Rename nested column names in R
问:
我希望根据定义的模式创建一个 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)
col3
name(col4)
col4
{
"col1":1,
"col2":6,
"fields":[
{
"name":"col3",
"value":"a"
},
{
"name":"col4",
"value":"q"
}
]
}
答:
2赞
r2evans
8/14/2023
#1
我们可以在每个嵌套框架上使用。(我在这里只是为了减少演示而切片。pivot_longer
1: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::map
lapply
请注意,这必须转换为 (etc),因为重塑要求所有值共享同一类。这意味着您的一些条目是(例如)。104
"104"
"value": "104"
评论
1赞
Ryan Garnett
8/14/2023
这正是我想要的,非常感谢您的帮助!
上一个:R - gsub 和编码问题
下一个:嵌套分组变量的标签
评论