R:从.csv文件中读取并转换成多列数据框。

3

我对 R 还不熟悉,目前在读取 .csv 文件并将其转换为有 7 列的 data.frame 过程中遇到了很多麻烦。这是我所做的:

gene_symbols_table <- as.data.frame(read.csv(file="/home/nikita/Desktop
/CElegans_raw_data/gene_symbols_matching.csv", header=TRUE, sep=","))

之后我得到了一个 data.frame,其 dim = 46761 x 1,但我需要它是 46761 x 7。我尝试了以下的 stackoverflow 线程:

  1. 如何在 R 中读取具有不同列数的 CSV 文件

  2. read.delim() - 错误 "more columns than column names" 和 "header and ''col.names" are of different lengths"

  3. 将数据帧的一列拆分为多个列

但不知何故,在我的情况下什么都没有起作用。 这是表格的样子:

> head(gene_symbols_table, 3)
input.reason.matches.organism.name.primaryIdentifier.symbol.briefDescription.c
lass.secondaryIdentifier
1                     WBGene00008675 MATCH 1 Caenorhabditis elegans    
WBGene00008675 irld-26  Gene F11A5.7
2                      WBGene00008676 MATCH 1 Caenorhabditis elegans 
WBGene00008676 oac-15  Gene F11A5.8
3                            WBGene00008677 MATCH 1 Caenorhabditis elegans 
WBGene00008677   Gene F11A5.9

在Excel中,.csv文件看起来像这样:
input   |  reason   |  matches  |   organism.name  |    primaryIdentifier   |  symbol   | 
briefDescription
WBGene00008675  |   MATCH  |    1     |   Caenorhabditis elegans    WBGene00008675  |   irld-26   |   ...   
...

以下是代码示例:
gene_symbols_table <- read.table(file="/home/nikita/Desktop
/CElegans_raw_data/gene_symbols_matching.csv", header=FALSE, sep=",", 
col.names = paste0("V",seq_len(7)), fill = TRUE)

看起来似乎运行正常,但是当我查看dim时立刻发现它是错误的:20124 x 7。然后:

V1
1input;reason;matches;organism.name;primaryIdentifier;symbol;briefDescription;class;secondaryIdentifier
2                     WBGene00008675;MATCH;1;Caenorhabditis 
elegans;WBGene00008675;irld-26;;Gene;F11A5.7
3                      WBGene00008676;MATCH;1;Caenorhabditis 
elegans;WBGene00008676;oac-15;;Gene;F11A5.8
  V2 V3 V4 V5
1            
2            
3        

1

所以,它是错误的。

尝试使用read.table的其他方法也会出现第二个stackoverflow线程中指定的错误。

我还尝试将只有一列的data.frame分成7个部分,但是目前没有成功。


当您将 sep=',' 更改为 sep=';' 时会发生什么? - Nate
“more columns than column names” 错误 - Nikita Vlasenko
1
我认为你需要包含更多文件行(如文本编辑器中显示的那样,而不是 Excel)才能获得帮助。你的 Excel 片段表明你可能需要一个 sep = "|" 参数,但这仍然不清楚。此外,read.csv() 的响应是数据框,因此你不需要使用 as.data.frame() - Thomas
我在这里自己添加了 '|',以便更好地可视化。在 Excel 中,这些只是单元格。 - Nikita Vlasenko
@NikitaVlasenko 你有没有办法知道你的数据是否是“不整齐”的,也就是说,某些行可能会有多于或少于7列的情况?引起该错误的另一个原因是数据中存在索引列但没有列名。 - Nate
数据肯定没问题。我只是注意到当我用LibreOffice打开文件时,看到“分隔符:分号、空格”。 - Nikita Vlasenko
1个回答

4
< p >从表格上看,sep似乎是空格或分号,而不是逗号。因此,您可以尝试指定这个分隔符,或者使用data.table包中的fread函数自动检测分隔符。

gene_symbols_table <- as.data.frame(fread(file="/home/nikita/Desktop
/CElegans_raw_data/gene_symbols_matching.csv", header=TRUE))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接