2014-06-21 83 views
1

我正尝试使用read.table命令读取R中的csv文件,并且我在R中得到的表格每个条目都有双引号。问题是我不能用引号将这些条目用于数学运算。使用read.table读取CSV文件会给出带引号的表格

这是我读命令:

exprs_data <- as.matrix(read.table("Test1.csv", 
    sep= ",",header=TRUE,row.names=1,as.is=TRUE))## 

这里是R中导入的表:

ABC DEF XYZ 
m0122 " 854" "1487" "1855" 
m0152 " 97" " 159" " 468" 
m0257 " 157" " 733" " 6" 

为什么有数字加引号?我之前从来没有遇到过这个问题。任何人都可以帮我在R中导入这个csv文件吗?

+2

你能显示'str(exprs_data)'的结果吗? –

+0

嗨,本,这是原始文件str(exprs_data)的结果:chr [1:4,1:22]“NEW”“NEW”“NEW”“NEW”“NEW”“NEW”“NEW”“NEW “”m0122“”m0152“”m0257“”m0427“... - attr(*,”dimnames“)=列表2 .. $:chr [1:4]”m0122“”m0152“”m0257“ “m0427” .. $:chr [1:22]“annotation”“Annotation2”“Generic_name”“Name”... – Bade

+1

如果省略'as.matrix()',该怎么办?用任何非数字列强制数据框会给你一个字符矩阵(如你所知)。 –

回答

2

引号表示矩阵中的值是字符串而不是数字。不知道你的csv文件是什么样子的,我怀疑文件中的某些值不是有效的数字,并且在转换为矩阵(你的as.matrix)语句时,一切都转换为字符串以符合矩阵的所需结构(需要是全部相同的数据类型)。我不完全确定为什么要进行矩阵转换,但是您可以通过使用colClasses参数明确指定read.table数据的类型。试试这个(假设所有列都被视为数字,否则colClasses使用不同值的向量为每列):

exprs_data <- read.table("Test1.csv", sep= ",", header=TRUE, 
         row.names=1, colClasses = "numeric") 

你可以将其转换为一个矩阵,如果你想,但你也可以直接上班与read.table返回的数据帧。如注释中所述,您可以通过运行str(exprs_data)来获取有关变量的结构(包括列数据类型)的详细信息。

+0

感谢您的提示。删除'as.matrix'可以解决问题。由于'heatmap2'软件包需要一个数字矩阵,所以默认是在mt read命令中。现在我读取文件,提取数字列并转换为矩阵。 – Bade