我有一个奇怪的foramt中的数据文件,我正试图将其导入并争论到R中。该文件就像一个CSV,其中的值是逗号分隔的。但是,也有包含逗号的文本字符串不应被解释为分隔符。
问题是,单个元素没有使用引号。在专有软件中,包含非分隔逗号的文本字符串由特殊的非ASCII字符定界,我猜这就是该软件确定哪些逗号不用作分隔符的方式。
我已经找到了如何用ASCII字符替换非ASCII字符,使其更容易在R中使用。但是,我仍然没有找到如何正确分割文本。
我目前的方法是用另一个符号(比如分号)替换所有不分隔的逗号,然后使用
strsplit
逗号。但是,我还没有弄清楚如何用分号代替非分隔逗号。
出于数据隐私的原因,我将在这里创建一个伪文本字符串:
my_string <- "1,2,3,4,NONASCIIsome text, hereNONASCII,7,8,9,NONASCII,more, pesky, commas,NONASCII,10,11"
我想要的输出:
[1] "1" "2" "3" "4"
[5] "some text; here" "7" "8" "9"
[9] ";more; pesky; commas;" "10" "11"
如果我跑步
strsplit
照原样(删除“NONSASCII”后),我会得到这样的东西,这不是我想要的:
[1] "1" "2" "3" "4" "some text" " here" "7" "8" "9"
[10] "" "more" " pesky" " commas" "" "10" "11"
我不确定
gsub
是最好的函数,但我已经找到了如何至少将有问题的字符串与regex匹配:
my_string2 <- gsub("NONASCII(.*?)NONASCII", "\\1", my_string)
这是我所能做到的。上面的代码只去掉了“NONSASCII”,但没有用分号代替非分隔逗号
如果还有另一种方法也能奏效,我洗耳恭听!