And*_*ald 5 metadata r read.table
我想将元数据添加到我的电子表格作为评论,然后R忽略这些.
我的数据是形式的
v1,v2,v3,
1,5,7,
4,2,1,#possible error,
Run Code Online (Sandbox Code Playgroud)
(它的例外情况要长得多.第一条评论实际上显示在前5行之外,用于scan确定列数)
我一直在努力:
read.table("data.name",header=TRUE,sep=",",stringsAsFactors=FALSE,comment.char="#")
Run Code Online (Sandbox Code Playgroud)
但是read.table(并且,就此而言count.fields)认为我还有一个比我实际做的更多的领域.我的数据框最后是一个名为"X"的空白列.我认为这是因为我的电子表格程序在每行的末尾都添加了逗号(如上例所示).
使用flush=TRUE没有效果,即使(根据帮助文件)它"[...]允许在最后一个字段后面添加注释[...]"
使用colClasses=c(rep(NA,3),NULL)也没有效果.
我之后可以删除该列,但由于这似乎是一种常见的做法,我想学习如何正确地做到这一点.
谢谢,
安德鲁
来自doc(?read.table):
colClasses字符.要为列假定的类向量.根据需要进行回收,或者如果命名了字符向量,则未指定的值将被视为NA.
可能的值是NA(默认情况下,使用type.convert时),"NULL"(跳过列时),原子矢量类之一(逻辑,整数,数字,复数,字符,原始)或"因子" ","日期"或"POSIXct".否则,需要有一个as方法(来自包方法),用于从"character"转换为指定的正式类.
注意它说使用"NULL",而不是NULL.实际上,这可以按预期工作:
con <- textConnection("
v1,v2,v3,
1,5,7,
4,2,1,#possible error,
")
read.table(con, header = TRUE, sep = ",",
stringsAsFactors = FALSE, comment.char = "#",
colClasses = c(rep(NA, 3), "NULL"))
# v1 v2 v3
# 1 1 5 7
# 2 4 2 1
Run Code Online (Sandbox Code Playgroud)
您关于注释字符和数据列数的问题与 read.table() 无关,但与您的电子表格无关(我使用的是 Excel)。read.table 的默认行为是将 # 视为注释的开头并忽略后面的内容。您收到错误的原因是数据行末尾有一个尾随逗号。这告诉 read.table 应该有更多数据。阅读你原来的例子:
> read.table(text="v1, v2, v3,
+ 1,5,7,
+ 4,2,1,#possible error,", sep=",", header=TRUE)
v1 v2 v3 X
1 1 5 7 NA
2 4 2 1 NA
Run Code Online (Sandbox Code Playgroud)
默认情况下会忽略注释,并创建第四列并标记为 X。您可以在事后轻松删除此列或使用 @flodel 提到的方法,或者您可以在将文件读入 R 之前删除尾随逗号。在 Excel 中,将文件另存为 csv(逗号分隔变量)时会添加尾随逗号,因为注释出现在第四列中,而 Excel 不会将其识别为注释。如果将文件保存为以空格分隔的文件,问题就会消失(删除 sep= 参数,因为空格是默认分隔符):
> read.table(text="v1 v2 v3
+ 1 5 7
+ 4 2 1#possible error", header=TRUE)
v1 v2 v3
1 1 5 7
2 4 2 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1319 次 |
| 最近记录: |