【问题标题】:unaligned data frame when writing a tsv file in R在 R 中写入 tsv 文件时未对齐的数据帧
【发布时间】:2021-09-28 07:48:09
【问题描述】:

我有一个看起来像这样的大数据框

    gene1   gene2   gene3
cell1   0   1   2
cell2   1   1   0
cell3   0   0   1

我转了countst=as.data.frame(t(counts)) ,而且它似乎工作正常

    cell1   cell2   cell3   
gene1   0   1   0
gene2   1   1   0
gene3   2   0   1

但是当我尝试用

写文件时
write.table(countst, file='counts.tsv')

我得到一个看起来像这样的 tsv

cell1   cell2   cell3   
gene1   0   1   0
gene2   1   1   0
gene3   2   0   1

有什么想法吗?

【问题讨论】:

    标签: r csv


    【解决方案1】:

    制表符分隔并不意味着所有列都会对齐,它只是一种有助于区分行中字段的机制。如果你想要一个正确渲染的列对齐的表格,你需要固定宽度的输出,这实际上是一种渲染,而不是一种存储方法。

    如果您希望它在文件中看起来不错(并且不担心以后再读回它),那么您可以使用类似的东西:

    writeLines(capture.output(print(t(dat))), "cells.tab")
    

    生成的文件如下所示:

          cell1 cell2 cell3
    gene1     0     1     0
    gene2     1     1     0
    gene3     2     0     1
    

    数据:

    dat <- structure(list(gene1 = c(0L, 1L, 0L), gene2 = c(1L, 1L, 0L), gene3 = c(2L, 0L, 1L)), class = "data.frame", row.names = c("cell1", "cell2", "cell3"))
    

    【讨论】:

    • 瑞文斯您好,感谢您的反馈。我的意思并不完全是文件的外观,而是这会改变数据结构,因为第一行最终的列比其余数据少,当我尝试使用其他包读取它时,这会变成一个问题!
    • 那么您的问题是row.names= 的默认值是真的吗? CSV/TSV 中的行名将始终创建一个伪列。如果是这种情况,我建议您将它们转换为显式列。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 2018-03-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2019-09-20
    相关资源
    最近更新 更多