我有一个名为的文件,genes.txt我想成为一个data.frame.它有很多行,每行有三个制表符分隔的字段:
mike$ wc -l genes.txt
42476 genes.txt
Run Code Online (Sandbox Code Playgroud)
我想将这个文件读入R中的data.frame.我使用read.table命令,如下所示:
genes = read.table(
genes_file,
sep="\t",
na.strings="-",
fill=TRUE,
col.names=c("GeneSymbol","synonyms","description")
)
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常,在哪里genes_file点genes.txt.但是,我的data.frame中的行数明显少于我的文本文件中的行数:
> nrow(genes)
[1] 27896
Run Code Online (Sandbox Code Playgroud)
我可以在文本文件中找到的东西:
mike$ grep "SELL" genes.txt
SELL CD62L|LAM1|LECAM1|LEU8|LNHR|LSEL|LYAM1|PLNHR|TQ1 selectin L
Run Code Online (Sandbox Code Playgroud)
似乎不在data.frame中
> grep("SELL",genes$GeneSymbol)
integer(0)
Run Code Online (Sandbox Code Playgroud)
事实证明
genes = read.delim(
genes_file,
header=FALSE,
na.strings="-",
fill=TRUE,
col.names=c("GeneSymbol","synonyms","description"),
)
Run Code Online (Sandbox Code Playgroud)
工作得很好.为什么read.delim在read.table时不起作用?
如果它正在使用,您可以genes.txt使用以下命令重新创建,您应该从命令行运行这些命令
curl -O ftp://ftp.ncbi.nlm.nih.gov/gene/DATA/gene_info.gz
gzip -cd gene_info.gz | awk -Ft '$1==9606{print $3 "\t" $5 "\t" $9}' > genes.txt
Run Code Online (Sandbox Code Playgroud)
但请注意,gene_info.gz是101MBish.
小智 15
对于read.table,其中一个默认引号字符是单引号.我猜你在描述字段中有一些不匹配的单引号,并且单引号之间的所有数据被汇总到一个条目中.
使用read.delim时,defualt引号字符是双引号,因此这不是问题.
指定你的引用字符,你应该全部设置.
> genes<-read.table("genes.txt",sep="\t",quote="\"",na.strings="-",fill=TRUE, col.names=c("GeneSymbol","synonyms","description"))
> nrow(genes)
[1] 42476
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5848 次 |
| 最近记录: |