如何阅读R中的单行CSV?

des*_*ros 4 csv r

我最近一直在研究一个虚拟数据集,我发现提供给我的数据都是单行的.一个类似的例子描述如下:

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)

  • 这只是一个例子.请改用`readLines("my_data.txt") (4认同)

dar*_*zig 9

如果你有数百万条记录,你可能想要加快这个过程,所以我建议使用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)

  • 什么阻止你加载`data.table`包?我的意思是我不确定为什么在基础R中做一些事情更好,如果有更方便和更快的方法来解决问题 - 特别是有很多行.我对你的论点很感兴趣. (2认同)