阅读R中的表格和注释

阅读R中的表格和注释,r,metadata,read.table,R,Metadata,Read.table,我想将元数据作为注释添加到电子表格中,然后让R忽略这些注释 我的数据是这样的 v1,v2,v3, 1,5,7, 4,2,1,#possible error, (例外是它长得多。第一条注释实际上出现在前5行之外,由scan用来确定列数) 我一直在努力: read.table("data.name",header=TRUE,sep=",",stringsAsFactors=FALSE,comment.char="#") 但是,read.table(就这点而言,count.fields)认为我比实

我想将元数据作为注释添加到电子表格中,然后让R忽略这些注释

我的数据是这样的

v1,v2,v3,
1,5,7,
4,2,1,#possible error,
(例外是它长得多。第一条注释实际上出现在前5行之外,由
scan
用来确定列数)

我一直在努力:

read.table("data.name",header=TRUE,sep=",",stringsAsFactors=FALSE,comment.char="#")
但是,
read.table
(就这点而言,
count.fields
)认为我比实际拥有的字段多了一个字段。我的数据框以一个名为“X”的空白列结束。我认为这是因为我的电子表格程序在每一行的末尾都添加了逗号(如上面的示例所示)

使用
flush=TRUE
没有效果,即使(根据帮助文件)它“[…]允许将注释放在最后一个字段[…]之后”

使用
colClasses=c(rep(NA,3),NULL)
也没有效果

我可以在事后删除该列,但由于这似乎是一种常见做法,我想学习如何正确地执行

谢谢

安德鲁

从文件(
?读取。表格
):

colClasses字符。为列假定的类向量。根据需要循环使用,或者如果命名了字符向量,则未指定的值将被视为NA

可能的值有NA(使用type.convert时的默认值)、“NULL”(跳过列时)、原子向量类之一(逻辑、整数、数字、复数、字符、原始值)或“factor”、“Date”或“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

con关于注释字符和数据列数的问题与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
默认情况下会忽略注释,并创建第四列并标记为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