【问题标题】:R: Read in .csv file and convert into multiple column data frameR:读入.csv文件并转换成多列数据框
【发布时间】:2018-05-27 21:51:12
【问题描述】:

我是 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. How can you read a CSV file in R with different number of columns

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

  3. Split a column of a data frame to multiple columns

但不知何故,在我的情况下没有任何效果。 以下是表格的外观:

> 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=';' 会发生什么?
  • more columns than column names 错误
  • 我认为您需要包含更多的文件行(显示在文本编辑器中,而不是 Excel 中)才能获得帮助。您的 Excel sn-p 建议您可能需要一个 sep = "|" 参数,但这仍然不清楚。另外,来自read.csv() 的响应是一个数据框,所以你不需要as.data.frame()。
  • 我加了 '|'我自己在这里是为了更好地可视化它。在 Excel 中,这些只是单元格
  • @NikitaVlasenko 您是否有任何方法知道您的数据是否“参差不齐”,这意味着某些行的列数可能多于或少于 7 列?出现该错误的另一个原因是,如果您的数据中有一个没有列名的索引列。

标签: r csv


【解决方案1】:

sep 似乎是空格或分号,而不是表格中的逗号。因此,要么尝试指定它,要么您可以尝试 data.table 包中的 fread,它会自动检测分隔符。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-23
    • 2019-08-18
    • 2013-06-24
    • 1970-01-01
    • 2023-01-15
    相关资源
    最近更新 更多