我的测试文件格式很奇怪。 第一行以
开头如果我忽略第一行并通过使用read.table导入数据,则效果很好,但是我没有列名。但是,如果我尝试使用col.names = TRUE导入数据,则会显示“ 多于列名”。我想我可以分别导入第一行和其余数据,并将第一行(即列名)添加到最终输出文件中。但是,当我导入第一行时:它完全忽略了列名,并跳转到0 0 0 0的行。是因为第一行具有#字符。而且由于#字符,数据中还有一个额外的空列。
答案 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并确保sed
在sed
上,或者使用文件的路径:
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
但是,我不喜欢这种方法,而是希望将平面文件的源修复为不包含麻烦的#
符号。另外,如果您仅一次需要此要求,则也可以手动编辑平面文件以删除#
符号。