【问题标题】:How to display a dataframe with separators in R?如何在 R 中显示带有分隔符的数据框?
【发布时间】:2013-07-02 18:36:35
【问题描述】:

我有一个数据框,其中一些列包含带空格的级别。当我调用数据框并将结果复制粘贴到read.table(text="") 时,它不起作用,因为不同行中的空格数不相等。那么如何首先干净地显示数据框,以便我可以将其复制粘贴到指定分隔符的 read.table 中,以便我可以快速做一个可重现的示例?还有如何删除自动计数(1,2,3,...)?

> tdat
     uL Intensity                      sample
1   6.0  29355.00 PCAM MCH LOW-atp,E1E2,UbK48
2   4.0  36034.00 PCAM MCH LOW-atp,E1E2,UbK48
3   2.0  42571.00 PCAM MCH LOW-atp,E1E2,UbK48
4   1.0  62325.00 PCAM MCH LOW-atp,E1E2,UbK48
5   0.5  79505.00 PCAM MCH LOW-atp,E1E2,UbK48
6  25.0  25190.00                    MCH Mild
7  20.0  19721.50                    MCH Mild

在这个数据框中,我有 3 列,我希望 R 在每列之间显示一个分隔符,以便我可以轻松使用 read.table。

【问题讨论】:

  • dput 可以为您工作吗?
  • @Tyler 给出了一个很好的建议。但是为什么你希望能够做到这一点呢?
  • 我希望能够通过直接从我的工作数据中进行简单的复制粘贴来快速制作一个可重现的示例。
  • 我想你应该看看this question的答案。还有一些功能(具体形式可能取决于您的操作系统)可以将对象写入剪贴板。
  • 我根据(我之前的评论)添加了一个答案,该答案涉及直接写入剪贴板,这可能就是您想要的。

标签: r read.table


【解决方案1】:

您的主要关注点似乎是制作一个可重复的示例,因此,有鉴于此,我想到了几个解决方案。

首先是使用write.table

> write.table(iris, row.names=F)
"Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "Species"
5.1 3.5 1.4 0.2 "setosa"
4.9 3 1.4 0.2 "setosa"
4.7 3.2 1.3 0.2 "setosa"

第二种是使用dput

> dput(iris[1:2, ])
structure(list(Sepal.Length = c(5.1, 4.9), Sepal.Width = c(3.5, 3), Petal.Length = c(1.4, 1.4), Petal.Width = c(0.2, 0.2), Species = structure(c(1L, 1L), .Label = c("setosa", "versicolor", "virginica"), class = "factor")), .Names = c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width", "Species"), row.names = 1:2, class = "data.frame")

StackOverflow 上的某个人可以复制此输出并将其分配给一个名称:

> my.data <- structure(list(Sepal.Length = c(5.1, 4.9), Sepal.Width = c(3.5, 3), Petal.Length = c(1.4, 1.4), Petal.Width = c(0.2, 0.2), Species = structure(c(1L, 1L), .Label = c("setosa", "versicolor", "virginica"), class = "factor")), .Names = c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width", "Species"), row.names = 1:2, class = "data.frame")
> my.data
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa

你应该看看这个问题:How to make a great R reproducible example?

【讨论】:

【解决方案2】:

这个问题的最佳答案似乎是关于将 R 对象复制/粘贴到剪贴板:

dput(tdat, file="clipboard")

这使用剪贴板作为文件连接,可以保存任何手动复制/粘贴。

【讨论】:

    【解决方案3】:

    按照目前的措辞,这个问题并没有多大意义——或者,至少我真的想不出你所描述的用例。

    不过,这里有一个解决方法:将printquote = TRUE 一起使用。用你的“tdat”

    > print(tdat, quote = TRUE)
          uL Intensity                        sample
    1 " 6.0" "29355.0" "PCAM MCH LOW-atp,E1E2,UbK48"
    2 " 4.0" "36034.0" "PCAM MCH LOW-atp,E1E2,UbK48"
    3 " 2.0" "42571.0" "PCAM MCH LOW-atp,E1E2,UbK48"
    4 " 1.0" "62325.0" "PCAM MCH LOW-atp,E1E2,UbK48"
    5 " 0.5" "79505.0" "PCAM MCH LOW-atp,E1E2,UbK48"
    6 "25.0" "25190.0"                    "MCH Mild"
    7 "20.0" "19721.5"                    "MCH Mild"
    

    然后可以按照您的描述读入:

    ## Note the single quote below
    read.table(text = '<<the stuff you copied from print(tdat, quote = TRUE)>>', ...)
    

    所有使用dput() 等的建议很可能是您应该关注的方向。

    【讨论】:

    • 扫描错误(文件,内容,nmax,sep,dec,引用,skip,nlines,na.strings,:第 29 行没有 4 个元素
    猜你喜欢
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-21
    • 2018-03-10
    • 1970-01-01
    • 2014-12-30
    • 2023-04-05
    相关资源
    最近更新 更多