我正在尝试将msigdb数据库中的数据读入我的R环境,但我无法将其读入我想要的格式。现在,当我读取其中的数据被读作类型“整数”时,我希望它作为“字符”类型或任何其他类型读入,以便当我在数据帧/矩阵之间传输数据时,我不会得到整数值对于项目而不是包含项目名称的书面信件。
df<-read.table("msigdb.v5.2.symbols.txt", fill = TRUE)
这就是我现在所拥有的,但就像我说的那样typeof(df[1,1])
我得到"integer"
。
总结一下:
在使用应该是字符的列读取数据后,当前行为是:typeof(df[1,1)]
生成"integer"
。所需的行为是:typeof(df[1,1]]
生成"character"
可重复的例子:
library(dplyr)
write.table(band_instruments, "test.txt")
df <- read.table("test.txt", header = TRUE)
typeof(df[1,1])
# [1] "integer"
谢谢!
答案 0 :(得分:1)
df<-read.table("msigdb.v5.2.symbols.txt", fill = TRUE, stringsAsFactors = FALSE)
默认情况下,read.table
会将所有列读为character
,除非colClasses
*另有说明,read.table
和data.frame
将字符转换为因子。当您提取因子的单个单元格时,它将显示为内部整数代码。
在stringsAsFactors = FALSE
的调用中设置read.table
可解决此问题。
*尽管下面有评论,但这是事实。 read.table
首先将所有列作为字符读取,然后转换它们。这是在文档中,您可以从源代码中看到它。您可以使用以下代码进行确认:
write.table(mtcars, "mtcars.txt")
read.table("mtcars.txt", header = TRUE, quote = ".")
# Fails because it reads the decimals in the numeric data as quotes
# From the documentation: Quoting is only considered for columns read
# as character, which is all of them unless colClasses is specified