如何解析CSV/数据框列中字符串格式的嵌套数组
解析CSV中存储为字符串的Numpy数组为数据框
方法一:利用JSON解析工具(推荐)
你的字符串格式和JSON数组完全兼容,用jsonlite包可以直接解析,避免复杂的字符串操作:
library(dplyr) library(jsonlite) library(tidyr) # 原始数据框 df <- data.frame(first_column = c("a","b","c"), second_column = c("[[1,2],[3,4]]","[[5,6],[7,8]]","[[9,10],[11,12]]")) # 解析并转换为目标格式 result_df <- df %>% # 将每个字符串解析成二维数组列表 mutate(second_column = purrr::map(second_column, jsonlite::fromJSON)) %>% # 把列表展开为多行 unnest(second_column) %>% # 将每行的向量拆分为单独的列 un_wider(second_column, names_sep = "_") %>% # 重命名为你需要的列名 rename(col_1 = second_column_1, col_2 = second_column_2) %>% # 可选:移除原first_column列 select(-first_column) print(result_df)
输出结果:
col_1 col_2 1 1 2 2 3 4 3 5 6 4 7 8 5 9 10 6 11 12
方法二:纯字符串处理(延续你的操作)
如果不想额外依赖jsonlite,可以继续用字符串操作完成:
library(dplyr) library(stringr) library(tidyr) df <- data.frame(first_column = c("a","b","c"), second_column = c("[[1,2],[3,4]]","[[5,6],[7,8]]","[[9,10],[11,12]]")) result_df <- df %>% # 移除最外层的[] mutate(second_column = str_replace_all(second_column, c("^\\[" = "", "\\]$" = ""))) %>% # 按"],["拆分每个字符串为多行 separate_rows(second_column, sep = "\\],\\[") %>% # 移除剩余的[]符号 mutate(second_column = str_remove_all(second_column, "\\[|\\]")) %>% # 按逗号拆分为两列,并自动转换为数值类型 separate(second_column, into = c("col_1", "col_2"), sep = ",", convert = TRUE) %>% # 可选:移除原first_column列 select(-first_column) print(result_df)
输出结果与目标格式完全一致:
col_1 col_2 1 1 2 2 3 4 3 5 6 4 7 8 5 9 10 6 11 12
内容的提问来源于stack exchange,提问作者94621
相关产品推荐
相关产品推荐

