R语言如何提取逗号分隔文本字符串中的各个独立元素
问题原因
你之前调用gregexpr只会返回匹配到的逗号在字符串中的字符位置,不会直接返回分割后的元素值,所以拿到的3是第一个逗号的位置,不是你要的第一个元素内容。R里有现成的字符串分割函数可以直接实现需求,不需要手动根据位置截取。
最简实现方法
直接用R内置的strsplit()函数按逗号分割即可,fixed = TRUE表示按字面量匹配逗号,不需要走正则匹配逻辑,性能更好也不会出现转义问题:
my_data <- "08,23,02.06.2022,5,7,THISPRODUCT,09.02.2022,yes,89,25" # 分割后取列表第一个元素,就是所有分割完成的元素组成的字符向量 all_items <- strsplit(my_data, ",", fixed = TRUE)[[1]]
执行后打印all_items就能得到全部10个元素:
> all_items [1] "08" "23" "02.06.2022" "5" "7" "THISPRODUCT" [7] "09.02.2022" "yes" "89" "25"
需要提取单个元素直接按向量索引取值即可,比如取第一个元素就用all_items[1],会返回预期的"08"。
其他可选实现
如果需要在分割时顺便做类型转换(比如把数字类的元素自动转成数值型),可以用scan()函数实现:
all_items_scan <- scan(text = my_data, what = character(), sep = ",", quiet = TRUE)
返回结果和strsplit完全一致,调整what参数的类型就可以实现自动类型转换。
不推荐手动基于gregexpr返回的位置写截取逻辑,容易出现边界计算错误,内置函数已经做了全场景的边界兼容,直接用即可
内容的提问来源于stack exchange,提问作者user3280899
相关产品推荐
相关产品推荐

