我最近一直在研究一个虚拟数据集,我发现提供给我的数据都是单行的.一个类似的例子描述如下:
Name,Age,Gender,Occupation A,10,M,Student B,11,M,Student C,11,F,Student
Run Code Online (Sandbox Code Playgroud)
我想导入数据并获得如下输出:
Name Age Gender Occupation
A 10 M Student
B 11 M Student
C 12 F Student
Run Code Online (Sandbox Code Playgroud)
可能会出现可能缺少价值的情况.导入此类数据需要逻辑.任何人都可以帮助我构建导入此类数据集的逻辑.
我尝试了正常的导入,但它确实没有帮助.刚刚按read.csv()
功能导入文件,它没有给我一个预期的结果.
编辑:如果数据如下:
Name,Age,Gender,Occupation ABC XYZ,10,M,Student B,11,M,Student C,11,F,Student
Run Code Online (Sandbox Code Playgroud)
我想要一个像这样的输出:
Name Age Gender Occupation
ABC XYZ 10 M Student
B 11 M Student
C 12 F Student
Run Code Online (Sandbox Code Playgroud)
sco*_*coa 11
您可以读取文件readLines
,将空格转换为换行符,然后使用以下内容读取read.csv
:
# txt <- readLines("my_data.txt") # with a real data file
txt <- readLines(textConnection("Name,Age,Gender,Occupation A,10,M,Student B,11,M,Student C,11,F,Student"))
read.csv(text=gsub(" ","\n",txt))
Run Code Online (Sandbox Code Playgroud)
产量
Name Age Gender Occupation
1 A 10 M Student
2 B 11 M Student
3 C 11 F Student
Run Code Online (Sandbox Code Playgroud)
如果你有数百万条记录,你可能想要加快这个过程,所以我建议使用data.table
's fread
代替read.csv
,也可以在读取R之前使用shell命令预处理文件,并且sed
会更快然后在R中进行字符串操作
例如,如果您存储了此CSV /tmp/x.csv
,您可以尝试以下方法:
> data.table::fread("sed 's/ /\\n/g' /tmp/x.csv")
Name Age Gender Occupation
1: A 10 M Student
2: B 11 M Student
3: C 11 F Student
Run Code Online (Sandbox Code Playgroud)