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

时间:2018-09-20 02:57:03

标签: r read.table

我的测试文件格式很奇怪。 第一行以

开头

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

2 个答案:

答案 0 :(得分:2)

有以下几种可能性:

1)处理两次,使用search_term["query"]["function_score"] = { "query": { "bool": bool_filter, }, "script_score": { "script": { "file": "my_file", "lang": "javascript" } } } 将其作为行的字符向量L读入。然后删除#并使用readLines读取L

read.table

2)分别读取标头对于较小的文件,先前的方法比较简短,应该可以,但是如果文件较大,则可能不希望对其进行两次处理。在这种情况下,请使用L <- sub("#", "", readLines("myfile.dat")) read.table(text = L, header = TRUE) 仅读入标题行,对其进行修复,然后使用列名读取其余部分。

readLines

3)管道:另一种方法是利用外部命令:

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

在类似UNIX的系统上,File <- "myfile.dat" cmd <- paste("sed -e 1s/.//", File) read.table(pipe(cmd), header = TRUE) 应该可用。在Windows上,您需要安装Rtools并确保sedsed上,或者使用文件的路径:

PATH

答案 1 :(得分:1)

一种方法是仅对第一行进行一次单独的读取以嗅出列名。然后,像以前一样执行read.table,并跳过第一行。

f <- "path/to/yourfile.csv"
con <- file(f, "r")
header <- readLines(con, n=1)
close(con)

df <- read.table(f, header=FALSE, sep = " ", skip=1)   # skip the first line
names(df) <- strsplit(header, "\\s+")[[1]][-1]         # assign column names

但是,我不喜欢这种方法,而是希望将平面文件的源修复为包含麻烦的#符号。另外,如果您仅一次需要此要求,则也可以手动编辑平面文件以删除#符号。