读取包含 nul 字符作为分隔符的 txt 文件,例如 \001?
Read txt files containing nul character as seprator, such as \001?
当我使用 r 读取 txt 文件时,我将 read.table sep para 设置为 sep="\001" 或 sep="\\001" 均无效。
V1
1 886153044351[=10=]10981623127[=10=]1[=10=]113036806119[=10=]113036806119
2 132693697611[=10=]10[=10=]118380389386[=10=]113795105928[=10=]113795105928
3 886134400554[=10=]10981623127[=10=]1[=10=]115033907649[=10=]115033907649
4 550075776697[=10=]115955516598[=10=]115955516598[=10=]113969121085[=10=]1
5 886156798054[=10=]10918770552[=10=]1[=10=]115977055775[=10=]115977055775
6 132642200735[=10=]118015668803[=10=]118015668803[=10=]118655109444[=10=]118655109444
以上是我使用读取 table 默认进入 R。
我使用了split函数,但它也没有像上面那样对sep起作用。
在notepad++中,我用逗号“,”替换了\0001,所以我可以像数据框一样将数据读入R。
如果数据很大,我不能用notepad++替换nul字符,怎么办?
尝试使用 read.delim
函数代替:
read.delim(
text = "V1
1 886153044351[=10=]10981623127[=10=]1[=10=]113036806119[=10=]113036806119
2 132693697611[=10=]10[=10=]118380389386[=10=]113795105928[=10=]113795105928
3 886134400554[=10=]10981623127[=10=]1[=10=]115033907649[=10=]115033907649
4 550075776697[=10=]115955516598[=10=]115955516598[=10=]113969121085[=10=]1
5 886156798054[=10=]10918770552[=10=]1[=10=]115977055775[=10=]115977055775
6 132642200735[=10=]118015668803[=10=]118015668803[=10=]118655109444[=10=]118655109444",
sep = "[=10=]1", header = FALSE )
V1 V2 V3 V4 V5
1 V1 NA NA NA NA
2 1 886153044351 981623127 NA 13036806119 13036806119
3 2 132693697611 0 18380389386 13795105928 13795105928
4 3 886134400554 981623127 NA 15033907649 15033907649
5 4 550075776697 15955516598 15955516598 13969121085 NA
6 5 886156798054 918770552 NA 15977055775 15977055775
7 6 132642200735 18015668803 18015668803 18655109444 18655109444
我无法从文件中使用@Colin Fay 的解决方案。
一个解决方案是:
- 以字符串形式读取文件
- 将
[=11=]1
替换为逗号
- 将新字符串写入文件
- 将新文件读取为 csv
在 R 中像这样:
library(readr)
rawfile <- read_file("txt001sep.txt")
rawfile_csv <- gsub("\\001", ",", rawfile)
write_file(rawfile_csv, "myfile.csv")
read_csv("myfile.csv", col_names=FALSE)
当我使用 r 读取 txt 文件时,我将 read.table sep para 设置为 sep="\001" 或 sep="\\001" 均无效。
V1
1 886153044351[=10=]10981623127[=10=]1[=10=]113036806119[=10=]113036806119
2 132693697611[=10=]10[=10=]118380389386[=10=]113795105928[=10=]113795105928
3 886134400554[=10=]10981623127[=10=]1[=10=]115033907649[=10=]115033907649
4 550075776697[=10=]115955516598[=10=]115955516598[=10=]113969121085[=10=]1
5 886156798054[=10=]10918770552[=10=]1[=10=]115977055775[=10=]115977055775
6 132642200735[=10=]118015668803[=10=]118015668803[=10=]118655109444[=10=]118655109444
以上是我使用读取 table 默认进入 R。 我使用了split函数,但它也没有像上面那样对sep起作用。
在notepad++中,我用逗号“,”替换了\0001,所以我可以像数据框一样将数据读入R。
如果数据很大,我不能用notepad++替换nul字符,怎么办?
尝试使用 read.delim
函数代替:
read.delim(
text = "V1
1 886153044351[=10=]10981623127[=10=]1[=10=]113036806119[=10=]113036806119
2 132693697611[=10=]10[=10=]118380389386[=10=]113795105928[=10=]113795105928
3 886134400554[=10=]10981623127[=10=]1[=10=]115033907649[=10=]115033907649
4 550075776697[=10=]115955516598[=10=]115955516598[=10=]113969121085[=10=]1
5 886156798054[=10=]10918770552[=10=]1[=10=]115977055775[=10=]115977055775
6 132642200735[=10=]118015668803[=10=]118015668803[=10=]118655109444[=10=]118655109444",
sep = "[=10=]1", header = FALSE )
V1 V2 V3 V4 V5
1 V1 NA NA NA NA
2 1 886153044351 981623127 NA 13036806119 13036806119
3 2 132693697611 0 18380389386 13795105928 13795105928
4 3 886134400554 981623127 NA 15033907649 15033907649
5 4 550075776697 15955516598 15955516598 13969121085 NA
6 5 886156798054 918770552 NA 15977055775 15977055775
7 6 132642200735 18015668803 18015668803 18655109444 18655109444
我无法从文件中使用@Colin Fay 的解决方案。
一个解决方案是:
- 以字符串形式读取文件
- 将
[=11=]1
替换为逗号 - 将新字符串写入文件
- 将新文件读取为 csv
在 R 中像这样:
library(readr)
rawfile <- read_file("txt001sep.txt")
rawfile_csv <- gsub("\\001", ",", rawfile)
write_file(rawfile_csv, "myfile.csv")
read_csv("myfile.csv", col_names=FALSE)