【问题标题】:How do I copy and paste data into R from the clipboard?如何将数据从剪贴板复制并粘贴到 R 中?
【发布时间】:2012-11-06 11:24:03
【问题描述】:

我在另一个应用程序(例如 Excel 等电子表格或文本编辑器)中打开了我的数据。如果我将该数据复制到我的操作系统剪贴板,我如何将其作为 data.frame 读入 R?

【问题讨论】:

标签: r io clipboard


【解决方案1】:

假设您在 Windows 剪贴板中有数据(例如,从 Excel 复制的数据),在 R 中将该数据放入名为 copdat 的变量中:

copdat <- read.delim("clipboard")

如果要将数据从名为 rdat 的 R 变量复制到 Windows 剪贴板(例如,复制到 Excel),请使用:

write.table(rdat, "clipboard", sep="\t", row.names=FALSE, col.names=FALSE)

【讨论】:

    【解决方案2】:

    用于“剪贴板”的名称和确切连接因操作系统而异。

    对于 Windows:

    x <- read.delim("clipboard")
    

    对于 Mac 操作系统:

    x <- read.delim(pipe("pbpaste"))
    

    之所以可行,是因为 read.delim 与许多函数一样,将接受文件以外的一系列连接类型。对于 Mac,我们实际上使用的是管道。 help(connections) 信息量很大。

    psych 包有一个函数read.clipboard(),通过测试您的操作系统,可以让这变得更容易一些。

    正如其他人在这里所指出的,您也可以写入剪贴板。通常有 32 K 的限制,可以通过在剪贴板后添加连字符和数字来提高限制,例如,从对象 df 传递高达 256 K 的数据:

    write.table(df, "clipboard-256")
    

    【讨论】:

    • 在 Ubuntu 中,您可以在另一个 *nix 中将 pbpaste 替换为 xsel -bo 或 xclip。
    • 我希望这是一个可以接受的答案...(好吧,我使用的是 OS X)。
    • @isomorphismes 所以 ubuntu 命令是 read.delim(pipe("xsel -bo")) ?我试过了,但没有用。该命令应该适用于 LibreOffice 复制/粘贴吗?
    • @Reilstein 据我所知,xsel 发生在比 libreoffice“低”的 X 级别。 ?system 可以调用像 xsel 这样的 bash 命令。
    • @Reilstein 看起来像?pipe,你也可以使用file(description='clipboard')
    【解决方案3】:

    有一个名为 datapasta 的 R 包/RStudio 插件可以非常巧妙地完成这项工作 - 请参阅 https://CRAN.R-project.org/package=datapasta。下图展示了它的简单性

    【讨论】:

    • 看起来不错,但在我的 Ubuntu 16.04 和 R 版本 3.4.0 上不起作用
    【解决方案4】:

    如果您想从电子表格中读取表格数据,我使用了以下代码

    read.table(file = "clipboard", sep = "\t", header=TRUE)
    

    【讨论】:

      【解决方案5】:

      在text = " " 引号之间输入您的数字的data = as.numeric(read.table(text = "125 140 200 200 190 ", sep = " "))。

      【讨论】:

      • read.table(text = readClipboard(), sep = " ") 可能会更好。
      • 类似:stackoverflow.com/a/10004019。使用该代码,您可以执行data=as.numeric(qw('125 140 200 200 190 '))
      【解决方案6】:

      我已经测试并在 Windows 和 MacOS 上工作的一种方法是使用 textConnection() 和 read.table()。

      首先,将数据作为文本粘贴到变量中:

      density_water_str <-   "T_/K Density_g/mL D2O
      273 0.999841 1.10469
      274 0.999900 NA
      275 0.999941 NA
      276 0.999965 NA
      277 0.999973 1.1057
      278 0.999965 1.10562
      279 0.999941 NA
      280 0.999902 NA
      281 0.999849 NA
      282 0.999781 NA
      281 0.999700 NA"
      

      然后,使用 read.table() 读取文本字符串

      density_water <- read.table(textConnection(
                                      object = density_water_str), 
                                  header = TRUE, 
                                  sep = "", 
                                  stringsAsFactors = FALSE)
      

      未在 Linux 或其他 Unix 系统上测试,但我相信它应该可以跨平台工作。

      【讨论】:

      • 类似 SAS 方法的可重现跨平台解决方案。谢谢!
      【解决方案7】:
      【解决方案8】:

      要使用“datapasta”补充“wjchulme”答案,如果您想通过 R 设置/解释 datapasta 的输出以便使用剪贴板内容设置变量,可以执行以下操作:

      read.from.clipboard <- function() {
        mydata<-eval(parse(text=paste(capture.output(datapasta::tribble_paste(output_context = datapasta::console_context()), file=NULL), collapse="")))
        str(mydata); View(capture.output(str(mydata), file=NULL)) #Check guessed format is ok
        return(mydata)
      }
      mydata<-read.from.clipboard() #Tibble format
      mydata<-as.data.frame(read.from.clipboard()) #Data.frame format
      
      

      【讨论】:

        【解决方案9】:

        我正在使用 Mojave 10.14

        随着命令的输入:X&lt;-read.delim("clipboard") 我在 Rstudio version Version 1.1.463 for Mac 中遇到了以下警告:

        Error in file(file, "rt") : cannot open the connection In addition: Warning message: In 
        file(file, "rt") : cannot open file 'pbpaste': No such file or directory 
        

        通过谷歌搜索解决方案,我已经尝试并测试了无数的解决方案、包和命令来运行它,经过日日夜夜的试用,终于可以正常工作了。

        我希望没有人再因这个问题而遭受如此多的痛苦,因此我分享了这些信息。

        请遵循以下所有内容,因为我不确定哪个特定安装起到了魔力(下载不需要按此特定顺序):

        1. 从https://cran.r-project.org/bin/macosx/下载R-3.6.1.pkg

        2. 从https://www.rstudio.com/products/rstudio/download/#download下载Rstudio

        3. 在 Rstudio 中安装rcmdr 包

          转到“工具”>“安装包”>输入rcmdr

        4. 从https://www.xquartz.org/下载XQuartz 'X11'

        5. 下载所有包

          转到https://cran.r-project.org/bin/macosx/tools/,然后下载以下工具:

          • clang-8.0.0.pkg(OS X 10.11+,签名,64 位)
          • gfortran-4.2.3.pkg(OS X 10.5+,签名,64 位驱动程序)
          • tcltk-8.5.5-x11.pkg(OS X 10.5+,已签名)
        6. 现在回到 Rstudio 并输入:

          X<-read.delim("clipboard") 
          X 
          

          excel中复制的数据现在将导入Rstudio控制台。

        希望这些信息对您有所帮助。

        【讨论】:

        • 您在 Mac 上使用 windows 命令。使用管道(“pbpaste”)代替“剪贴板”
        • Mac 用户,请按照这些说明操作。他们使用 read.table(pipe("pbpaste"), header=TRUE) 为我工作
        【解决方案10】:

        我需要将复合 复制到 Windows 中,而 read.table() 在我的 URL 周围输出带有引号的字符向量。 相反,我使用了 包中的 writeClipboard(URL,format=1),它成功了。

        【讨论】:

          【解决方案11】:

          查看?file 的文档,Clipboard 部分:

          剪贴板 文件只能在“r”模式下与 description = “clipboard”一起使用。这将读取 X11 主要选择(请参阅http://standards.freedesktop.org/clipboards-spec/clipboards-latest.txt),也可以将其指定为“X11_primary”,将次要选择指定为“X11_secondary”。在大多数系统上,剪贴板选择(由“编辑”菜单中的“复制”使用)可以指定为“X11_clipboard”。 当打开剪贴板进行阅读时,内容会立即复制到连接中的内部存储中。 希望写入 X11 选项之一的 Unix 用户可以通过 xclip (http://sourceforge.net/projects/xclip/) 或 xsel (http://www.vergenet.net/~conrad/software/xsel/) 来执行此操作,例如通过 pipe("xclip -i", "w")选择。 macOS 用户可以使用 pipe("pbpaste") 和 pipe("pbcopy", "w") 来读取和写入该系统的剪贴板。

          所以,例如使用 magrittr:

          base::file(description='clipboard') %>% readLines
          

          【讨论】:

            【解决方案12】:

            另一种方法是使用 Clipr 包。我把link留给你,我在那里得到了这个例子。

            library("clipr")
            my_data <- read_clip_tbl()
            my_data
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2017-10-14
              • 2017-05-18
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-12-23
              相关资源
              最近更新 更多