【问题标题】:R - pipe("pbcopy") columns not lining up with pastingR - 管道(“pbcopy”)列未与粘贴对齐
【发布时间】:2012-02-03 17:13:44
【问题描述】:

作为question I wrote a few days ago 的后续行动,我终于弄清楚了如何复制到剪贴板以粘贴到其他应用程序中(阅读:Excel)。

但是,当使用该功能进行复制和粘贴时,变量列标题在粘贴时没有正确对齐。

数据(取自我碰巧看到的一个流动数据示例):

data <- read.csv("http://datasets.flowingdata.com/post-data.txt")

复制功能:

write.table(file = pipe("pbcopy"), data, sep = "\t")

加载后,数据如下所示:

    id  views comments               category
1 5019 148896       28 Artistic Visualization
2 1416  81374       26          Visualization
3 1416  81374       26               Featured
4 3485  80819       37               Featured
5 3485  80819       37                Mapping
6 3485  80819       37           Data Sources

有一个没有列变量名的行号(1,2,3,4,...)

使用read.table(pipe("pbpaste")) 函数,它将正常加载回R

但是,当我将其粘贴到 ExcelTextEdit 时,第二个变量的列名将位于第一个变量列名槽中,如下所示:

id  views   comments    category    
1   5019    148896      28          Artistic Visualization
2   1416    81374       26          Visualization
3   1416    81374       26          Featured
4   3485    80819       37          Featured
5   3485    80819       37          Mapping
6   3485    80819       37          Data Sources 

这使尾随列没有列名。

有没有办法确保复制到clipboard 的数据正确对齐和标记?

【问题讨论】:

    标签: r pipe pbcopy


    【解决方案1】:

    行号在 R data.frame 中没有列名。它们不在原始数据集中,但除非您抑制它,否则它们会被放入剪贴板的输出中。该选项的默认设置为 TRUE,但您可以覆盖它。如果您想要这样的列作为命名列,则需要创建它。发送到 excel 时试试这个。

    df$rownums <- rownames(df)
    edf <- df[ c( length(df), 1:(length(df)-1))]   # to get the rownums/rownames first
    write.table(file = pipe("pbcopy"), edf, row.names=FALSE, sep = "\t")
    

    【讨论】:

    • 'row.names=FALSE` 提供了我正在寻找的东西。谢谢。
    【解决方案2】:

    您可能只想将参数col.names=NA 添加到您对write.table() 的调用中。它的作用是在第一列的标题行中添加一个空字符串(一个空的列名)。

    write.table(file = pipe("pbcopy"), data, sep = "\t", col.names=NA)
    

    要查看区别,请比较这两个函数调用:

    write.table(data[1:2,], sep="\t")
    # "id"    "views" "comments"      "category"
    # "1"     5019    148896  28      "Artistic Visualization"
    # "2"     1416    81374   26      "Visualization"
    
    write.table(data[1:2,], sep="\t", col.names=NA)
    # ""      "id"    "views" "comments"      "category"
    # "1"     5019    148896  28      "Artistic Visualization"
    # "2"     1416    81374   26      "Visualization"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多