从数据框引号内提取字母字符串并拆分为指定多列
R数据框字符串拆分解决方案
需要将包含JSON数组格式字符串的列,提取引号内的内容并拆分至三列,同时统一字符串大小写(如"Jewelry"转为"jewelry"),以下是两种可行的实现方法:
方法一:使用jsonlite包(推荐,适配JSON格式字符串)
# 加载jsonlite包 library(jsonlite) # 构造原始数据框 df <- data.frame(string = c('["jewelry","tailor","Jewelry"]', '["apple","banana","orange"]'), stringsAsFactors = FALSE) # 解析JSON字符串并转换为目标数据框 result_df <- as.data.frame(t(sapply(df$string, function(x) tolower(fromJSON(x))))) # 重命名列 colnames(result_df) <- paste0("string", 1:3) # 输出结果 result_df
运行后输出:
string1 string2 string3 1 jewelry tailor jewelry 2 apple banana orange
逻辑说明:
fromJSON():直接解析JSON格式字符串,转为字符向量,无需手动处理正则匹配。tolower():统一将字符串转为小写,匹配需求格式。sapply()+t():遍历每行字符串,处理后转置矩阵,确保行对应原数据行、列对应拆分后的元素。
方法二:使用stringr包(正则提取方式)
# 加载stringr包 library(stringr) # 构造原始数据框 df <- data.frame(string = c('["jewelry","tailor","Jewelry"]', '["apple","banana","orange"]'), stringsAsFactors = FALSE) # 提取所有双引号内的字符串 extracted_list <- str_extract_all(df$string, '(?<=")[^"]+(?=")') # 转换为数据框并统一小写 result_df <- as.data.frame(do.call(rbind, extracted_list), stringsAsFactors = FALSE) %>% mutate_all(tolower) # 重命名列 colnames(result_df) <- paste0("string", 1:3) # 输出结果 result_df
逻辑说明:
str_extract_all():通过正则表达式(?<=")[^"]+(?=")匹配双引号间的内容,提取所有目标字符串。do.call(rbind, ...):将提取的字符串列表转为矩阵,再转成数据框。mutate_all(tolower):批量将所有列的字符串转为小写。
内容的提问来源于stack exchange,提问作者Becky
相关产品推荐
相关产品推荐

