R-我的第一行的列名称中有 # 字符?

RnD*_*RnD 1 r read.table

我的测试文件的格式非常奇怪。第一行开头为:

在此输入图像描述 如果我忽略第一行并使用 read.table 导入数据,它效果很好,但我没有列名。但是,如果我尝试使用 col.names=TRUE 导入数据,它会显示“列数多于列名”。我想我可以单独导入第一行和其余数据,并将第一个(即列名称)添加到最终输出文件中。但是当我导入第一行时:它完全忽略列名并跳转到 0 0 0 0.... 的行。是否因为第一行有一个 # 字符。而且由于 # 字符,数据中还有一个额外的空列。

G. *_*eck 5

以下是一些可能性:

1) 处理两次将其作为行字符向量 ,L使用读入readLines。然后删除 # 并L使用以下命令读取read.table

L <- sub("#", "", readLines("myfile.dat"))
read.table(text = L, header = TRUE)
Run Code Online (Sandbox Code Playgroud)

2)单独读取标头对于较小的文件,先前的方法很短并且应该没问题,但如果文件很大,您可能不想处理它两次。在这种情况下,请readLines仅读入标题行,对其进行修复,然后应用列名称读入其余部分。

File <- "myfile.dat"
col.names <- scan(text = readLines(File, 1), what = "", quiet = TRUE)[-1]
read.table(File, col.names = col.names)
Run Code Online (Sandbox Code Playgroud)

3)pipe另一种方法是使用外部命令:

File <- "myfile.dat"
cmd <- paste("sed -e 1s/.//", File)
read.table(pipe(cmd), header = TRUE)
Run Code Online (Sandbox Code Playgroud)

在类 UNIX 系统上sed应该可用。在 Windows 上,您需要安装Rtools并确保sed位于该文件上PATH,否则使用该文件的路径:

cmd <- paste("C:/Rtools/bin/sed -e 1s/.//", File)
read.table(pipe(cmd), header = TRUE)
Run Code Online (Sandbox Code Playgroud)