R语言数据规整问题:将嵌套变量列拆分为多列
拆分DataFrame中键值对格式列的解决方案
根据你的需求,使用tidyverse工具拆分variables列的键值对并转为宽表,分两种常见场景处理:
场景1:variables列是JSON格式字符串
如果variables中的内容是标准JSON格式(如{"temp":22.5, "humidity":70, "wind_dir":"NW"}),可以用以下步骤处理:
library(tidyverse) library(jsonlite) # 替换为你的数据框名称 weather_data <- weather_data %>% # 将JSON字符串转为列表列 mutate(variables = map(variables, jsonlite::fromJSON)) %>% # 把列表列拆分为单独的列,names_sep用于处理重名变量 unnest_wider(variables, names_sep = "_")
场景2:variables列是逗号分隔的键值对字符串
如果variables中的内容是类似"temp:22.5, humidity:70, wind_dir:NW"的格式,用以下流程处理:
library(tidyverse) weather_data <- weather_data %>% # 将每个键值对拆分为单独行 separate_rows(variables, sep = ", ") %>% # 拆分键和值为两列,注意匹配实际的键值分隔符 separate(variables, into = c("var_name", "var_value"), sep = ": ") %>% # 转为宽表,缺失的变量值用NA填充 pivot_wider(names_from = var_name, values_from = var_value, values_fill = NA) %>% # 可选:将数值型变量转为对应类型 mutate(across(c(temp, humidity), as.numeric))
注意事项
- 请根据实际的分隔符调整
sep参数(比如如果键值用=分隔,就把sep = ": "改成sep = " = ") - 如果部分行缺少某些变量,
pivot_wider会自动用values_fill指定的值填充,确保所有变量列都被保留 - 若变量名存在重复,可在
unnest_wider或pivot_wider中设置names_sep参数添加前缀/后缀避免冲突
内容的提问来源于stack exchange,提问作者Carolina Toledo
相关产品推荐
相关产品推荐

