如何在R中按逗号拆分字符串但保留带逗号的日期?
在R中拆分带引号的CSV格式字符串
针对你提供的带引号的CSV格式字符串,有两种简单的处理方式可以实现需求:
方法一:利用CSV读取函数(推荐)
这种字符串本质是标准的CSV单行数据,直接用R的CSV读取函数可以自动识别引号内的逗号为字段内容,不会错误拆分:
# 定义原始字符串 raw_str <- 'ABCDE,"January 10, 2010",F,,,,GH,"March 9, 2009",,,' # 将字符串转为文本流,按CSV规则读取 csv_data <- read.table(textConnection(raw_str), sep = ",", header = FALSE, stringsAsFactors = FALSE, quote = '"') # 转换为向量并过滤空值 final_result <- unlist(csv_data)[unlist(csv_data) != ""] # 输出结果 cat(paste(final_result, collapse = "\n"))
运行后输出:
ABCDE
January 10, 2010
F
GH
March 9, 2009
方法二:正则表达式拆分
如果不想用CSV读取函数,可以用正则匹配不在成对引号内的逗号进行拆分:
# 定义原始字符串 raw_str <- 'ABCDE,"January 10, 2010",F,,,,GH,"March 9, 2009",,,' # 按不在引号内的逗号拆分 split_list <- strsplit(raw_str, ',(?=(?:[^"]*"[^"]*")*[^"]*$)', perl = TRUE)[[1]] # 过滤空元素并去除字段首尾的引号 final_result <- gsub('^"|"$', '', split_list[split_list != ""]) # 输出结果 cat(paste(final_result, collapse = "\n"))
正则表达式,(?=(?:[^"]*"[^"]*")*[^"]*$)的作用是:只匹配后面跟着偶数个引号的逗号,确保该逗号不在引号包裹的内容内部。
内容的提问来源于stack exchange,提问作者therickster
相关产品推荐
相关产品推荐

